注意:仍在开发中!
当前版本: 0.0.0
测试版
Flask-BDA 仍处于初始开发阶段,正在使用 Python 3.8.6 版本进行测试。
当前路线图和高级项目计划:https://trello.com/b/uu4HNPBh/flask-bda-features-roadmap
Flask-BDA 将遵循其版本的语义版本控制,版本号采用{major}.{minor}.{patch}
方案,其中:
版本0.0.1
之后,至少 3 个次要版本将保留弃用内容
Tableau、Power BI 和 Amazon QuickSight 等其他解决方案虽然是出色的工具,但专注于报告,但不允许您在需要时编辑数据或将数据添加到平台,这意味着您需要其他解决方案或软件来实现业务目标
每个人都可以使用 Excel 等解决方案,并为您提供可能需要的所有灵活性。尽管如此,您的数据仍然分散,不容易为您的团队和客户提供共享的事实来源,而且 Excel 文档很容易不同步甚至共享,从而使您的公司面临安全风险。
Flask-BDA 通过为您提供控制来帮助您交付快速、安全的全栈应用程序,速度提高 2-5 倍(2-5 倍)。永远没有供应商或环境锁定。
Flask 是由 Armin Ronacher 编写的开源“微框架”,允许您使用 Python 构建 Web 应用程序。仅提供一小部分核心功能即可提供可扩展的基础,使开发人员可以选择他们的应用程序需要哪些附加工具。
尽管被称为微框架,Flask 非常适合构建小型和大型 Web 应用程序。 Flask 已被 Twilio、Pinterest、Lyft、LinkedIn 和 Uber 等大公司用于生产系统。
Flask-BDA 为您提供预先存在的 Flask 应用程序结构,帮助您更快地开发,使您能够:
自动处理减慢软件开发速度的繁琐方面
- 创建和管理所有数据库连接和复杂查询。
- 具有基于用户和角色的访问控制的应用程序安全性
- 自动审核每个操作
Flask-BDA 是一个低代码平台(这意味着我们将通过为您编写大量代码来帮助您),为公司提供快速开发和部署在任何设备上运行的安全应用程序的工具。
我们改变了软件的构建方式,以便您可以快速创建和部署随您的业务发展而发展的任何规模的关键应用程序,从而节省您的时间和金钱。
开发人员可以构建和部署全方位的应用程序 - 从消费者应用程序到关键的内部业务系统 - 旨在帮助开发人员快速高效地交付安全的应用程序,以便在几周甚至几天内交付应用程序。
Flask-BDA 提供全栈开发:用于创建开箱即用的跨平台应用程序的 UI、业务流程、自定义逻辑和数据模型。为您提供一个脚手架,您可以在需要时添加自己的自定义代码。永远没有锁定。
通过预先配置的开发环境,我们减少了进入市场的痛苦(和成本),让您可以灵活地选择部署地点和方式。
Flask-BDA 免费且对开发人员友好,是一款免费使用、可用源的应用程序开发工具,具有对开发人员友好的许可证。
Flask-BDA 完全免费,可用于商业和个人项目。
然而,软件开发始终是一项成本高昂的工作:
- 您需要向一名或多名软件开发人员、业务分析师、设计师、项目经理和其他团队成员付费来构建您的产品。
- 你的产品永远不会完成。软件项目总是需要持续开发。
- 当您交付产品时,您的竞争对手已经在开发新的和改进的功能,您需要能够保持领先或至少跟上,否则用户将转向您的竞争对手。
- 一旦您开始使用您的产品,您和您的团队就会想到新功能,使其变得更好并改进您的流程。
- 持续维护。当用户使用该产品时,他们会找到你没有想到的方法来破坏它,并且需要修复它们。
项目规模 | 初始成本 | 持续成本 |
---|---|---|
小型项目(2 - 6 周的开发时间) | $11 250 | $563 - $1 125 (±10%) / 每月 |
中型项目(开发 2 - 4 个月) | $33 750 | $1 563 - $3 375 (±10%) / 每月 |
大型项目(开发时间为 6 - 18 个月或更长时间) | $156 250 | $3 375 - $15 625 (±10%) / 每月 |
项目规模 | 初始成本 | 持续成本 |
---|---|---|
小型项目(开发时间为 1 - 3 周) | $3 750 | $188 - $375 (±10%) / 每月 |
中型项目(开发 1 - 3 个月) | $11 250 | $375 - $1 125 (±10%) / 每月 |
大型项目(2 - 6 个月或更长时间的开发) | $52 084 | $1 125 - $5 208 (±10%) / 每月 |
使用 Flask-BDA,您不会失去“正常开发”的任何灵活性,因为它使用标准化的开发模式和经过试验和测试的技术。
Flask-BDA 使用许多开源技术并利用现有技术堆栈,以便您可以轻松找到使用相同技术的其他开发人员。因此,无论您的公司赚取多少收入或您的业务处于哪个位置,您都无需支付昂贵的许可费或环境成本。
只需几分钟即可开始快速轻松的预配置开发环境。
无需复杂的设置。仅需要 python(建议 3.8.6)。
更新您的配置:数据库连接和应用程序设置。
创建您自己的模块和数据结构(数据模型),允许您使用不同的数据库。
自动生成的全功能:
Admin
和Mobile
页面- 带有 Swagger 前端的
REST APIs
- 带有 GraphQL 前端的
GraphQL API
可以按模块轻松管理。
根据您的特定需求配置页面,并轻松与您的团队和客户共享。
在独立的模块中编写自己的自定义代码,这样就不会影响其他模块,
轻松集成不同项目的模块。
使用相同的代码库部署到:
- 桌面
- 网络
- 移动的
环境包括:
- 码头工人
- AWS 无服务器
- 数字海洋
- 赫罗库
- 共享托管。
pip
已安装(pip 应该已经安装,因为它附带了最新版本的 python),如果没有安装,请从此处安装:https://pip.pypa.io/en/stable/installing/python -m pip --version
注意:本文档假设您将
pip3
作为pip
运行,因此所有指令都是用pip
编写的。如果您希望在从终端调用pip
时使pip3
运行,您可以从pip
创建到pip3
的符号链接:
pip install --upgrade pip
sudo
运行命令,例如: sudo pip install --upgrade pip
nano ~ /.bash_profile
在该文件中,粘贴以下内容:
alias pip= ' pip3 '
alias python= ' python3 '
注意:您可能需要在 MacOS 上删除 python 2.7,因为它是预安装在我的发行版上的,这对于实现此目标非常有帮助:
sudo rm -rf /Library/Frameworks/Python.framework/Versions/2.7
sudo rm -rf " /Applications/Python 2.7 "
ls -l /usr/local/bin | grep ' ../Library/Frameworks/Python.framework/Versions/2.7 '
然后运行以下命令删除所有链接:
cd /usr/local/bin/
ls -l /usr/local/bin | grep ' ../Library/Frameworks/Python.framework/Versions/2.7 ' | awk ' {print $9} ' | tr -d @ | xargs rm
安装 Python 和
pip
后,您将需要安装 Flask-BDA 命令行函数的依赖项才能正确运行:
pip install click
您可能想要全局安装的其他依赖项(但应在创建项目时自动运行)包括:
pip install virtualenv
pip install flaskwebgui
pip install pyinstaller
要开始使用 Flask-BDA 构建您的第一个项目,请按照以下简单步骤在几分钟内创建并运行您自己的预配置开发环境。
在本快速入门中,我们将创建一个名为
"My Awesome Project"
的项目。但是,您可以随意命名该项目。
create_project.py
python 文件并运行它以帮助您启动项目"My Awesome Project"
curl -L https://raw.githubusercontent.com/RyanJulyan/Flask-BDA/main/create_project_git.py --ssl-no-revok -o create_project_git.py
python create_project_git.py --project= " My Awesome Project "
create_project.py
python 文件并运行它以帮助您启动项目"My Awesome Project"
curl -L https://raw.githubusercontent.com/RyanJulyan/Flask-BDA/main/create_project_git.py --ssl-no-revok -o create_project_git.py
python create_project_git.py --project= " My Awesome Project "
注意:如果您没有填写有效的项目名称,系统会提示您这样做:
- 出现提示时填写您的项目名称,例如:
- 请确保在项目名称两边加上引号以防止出现错误,例如:
"My Awesome Project"
Invalid Project Name !
Please enter a valid project name :
"My Awesome Project"
注意:您会注意到这会在与文件“create_project_git.py”相同的路径中创建一个文件夹。该文件夹将是小写的,并且将删除所有特殊字符并用下划线替换空格,例如:
my_awesome_project
注意:在开发过程中,您可能希望完全使用另一个分支或存储库。这可以帮助测试或者如果您已经脱离了核心 Flask-BDA 项目。
- 您可以在创建新项目时指定
Owner
、Repo
和Branch
。
curl - L https : // raw . githubusercontent . com / RyanJulyan / Flask - BDA / RyanJulyan - Dev / create_project_git . py - - ssl - no - revok - o create_project_git . py
python create_project_git . py - - project = "My Awesome Project" - - owner = "RyanJulyan" - - repo = "Flask-BDA" - - branch = "RyanJulyan-Dev" - - create_venv = True
注意:所有连接类型仍有待测试!
Flask-BDA 中的数据库连接快速而简单。您可以拥有 1 个或多个数据库,不同的租户可以拥有自己的数据库连接以及自己的数据库类型(SQLite、MySQL、SQL Server、PostgreSQL)
默认情况下,Flask-BDA 设置有一个 SQLite 数据库。这实际上是因为您不需要额外的基础设施来设置和运行它,这使得 SQLite 成为一个快速而简单的选择。
更改默认数据库:
flaskbda
)、用户( flaskbda_user
)和密码( password
)config.py
DATABASE_ENGINE
,并注释 mysql 的DATABASE_ENGINE
。DATABASE_NAME
,并在mysql中注释:DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
SQLALCHEMY_DATABASE_URI
,并注释 mysql SQLALCHEMY_DATABASE_URI
。 ##########
# SQLite #
##########
# DATABASE_ENGINE = 'sqlite:///'
# DATABASE_NAME = os.path.join(BASE_DIR, 'databases/sqlite/default.db')
# SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_NAME
#########
# MySQL #
#########
DATABASE_ENGINE = 'mysql://'
DATABASE_HOST = ''
DATABASE_PORT = '1433'
DATABASE_USERNAME = ''
DATABASE_PASSWORD = ''
DATABASE_NAME = ''
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME
DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
DATABASE_HOST = 'localhost'
DATABASE_PORT = '3306'
DATABASE_USERNAME = 'flaskbda_user'
DATABASE_PASSWORD = 'password'
DATABASE_NAME = 'flaskbda'
更改默认数据库:
flaskbda
)、用户( flaskbda_user
)和密码( password
)config.py
import pyodbc
中注释。DATABASE_DRIVER
中进行注释。DATABASE_ENGINE
,例如在 SQLServer DATABASE_ENGINE
中注释。DATABASE_NAME
,并在SQLServer中注释掉:DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
SQLALCHEMY_DATABASE_URI
,并在try
和except
中注释 SQLServer SQLALCHEMY_DATABASE_URI
。注意:如果您正在运行并尝试连接到
SQLEXPRESS
。请取消注释 SQLServerSQLEXPRESS
变量。这将在try
和except
中处理以创建正确的SQLALCHEMY_DATABASE_URI
注意:如果您想要 Windows 身份验证。请取消注释 SQLServer
TRUSTED_CONNECTION
变量。这将在try
和except
中处理以创建正确的SQLALCHEMY_DATABASE_URI
##########
# SQLite #
##########
# DATABASE_ENGINE = 'sqlite:///'
# DATABASE_NAME = os.path.join(BASE_DIR, 'databases/sqlite/default.db')
# SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_NAME
#############
# SQLServer #
#############
import pyodbc # noqa: E402
DATABASE_ENGINE = 'mssql+pyodbc://'
# SQLEXPRESS = '\SQLEXPRESS' # for SQLEXPRESS
# TRUSTED_CONNECTION = 'yes' # for windows authentication.
DATABASE_DRIVER = 'SQL+Server+Native+Client+11.0' # for windows authentication.
DATABASE_HOST = ''
DATABASE_PORT = '1433'
DATABASE_USERNAME = ''
DATABASE_PASSWORD = ''
DATABASE_NAME = ''
try :
if SQLEXPRESS == ' \ SQLEXPRESS' :
try :
if TRUSTED_CONNECTION == 'yes' :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '?trusted_connection=' + TRUSTED_CONNECTION + '&driver=' + DATABASE_DRIVER
else :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
try :
if TRUSTED_CONNECTION == 'yes' :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME + '?trusted_connection=' + TRUSTED_CONNECTION + '&driver=' + DATABASE_DRIVER
else :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + SQLEXPRESS + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
except NameError :
SQLALCHEMY_DATABASE_URI = DATABASE_ENGINE + DATABASE_USERNAME + ':' + DATABASE_PASSWORD + '@' + DATABASE_HOST + ':' + DATABASE_PORT + '/' + DATABASE_NAME + '&driver=' + DATABASE_DRIVER
DATABASE_HOST
DATABASE_PORT
DATABASE_USERNAME
DATABASE_PASSWORD
DATABASE_NAME
DATABASE_HOST = 'MSSQLSERVER'
DATABASE_PORT = '1433'
DATABASE_USERNAME = 'flaskbda_user'
DATABASE_PASSWORD = 'password'
DATABASE_NAME = 'flaskbda'
确保您的 MS-SQL 实例已设置远程连接权限并启用参考(此处)[https://knowledgebase.apexsql.com/configure-remote-access-connect-remote-sql-server-instance-apexsql-tools/ ]:
确保“SQL 服务器配置管理”设置配置正确
注意:您的安装将需要
Client Tools Connectivity
,如果找不到“SQL Server 配置管理”,那么您可能需要修改您的安装以包含Client Tools Connectivity
- 如果找不到“”,您可能需要使用“使用计算机管理”工具。来访问它。
- 这似乎是 Windows 10 的问题
多租户是一种软件架构,其中单个软件实例在服务器上运行并为多个租户(客户端)提供服务。多租户软件允许一个或多个应用程序的多个独立实例在共享环境中运行。
Flask-BDA 支持垂直分区的多租户。垂直分区意味着每个租户拥有不同的数据库(和数据库连接字符串)。
默认情况下,Flask-BDA 连接到名为
default
租户。这是使用SQLALCHEMY_BINDS
对象(位于config.py
中)完成的,该对象应该具有每个租户所需的特定连接详细信息。默认连接详细信息组合成一个名为SQLALCHEMY_DATABASE_URI
的字符串,该字符串旨在允许快速、轻松的单租户设置。
但是,您可以使用相同的结构来拥有多个租户,您可以将它们快速添加到
SQLALCHEMY_BINDS
对象中。要添加新租户,只需:
SQLALCHEMY_BINDS
对象中创建一个新行,其中包含租户名称和连接字符串详细信息 SQLALCHEMY_BINDS = {
"default" : SQLALCHEMY_DATABASE_URI ,
"client1" : 'sqlite:///databases/sqlite/client1.db' ,
}
现在,您可以通过将参数
organization=
添加到URL来与独立租户数据库交互,例如:example.com?organization=client1
,其中client1
是您在SQLALCHEMY_BINDS
对象中添加的名称。
这是通过拦截
app/_init_.py
中的@app.before_request
并通过使用app/mod_tenancy/multi_tenant.py
中的db.choose_tenant(g.organization)
更改数据库引擎绑定(使用全局变量g.organization
来实现的)通过获取 URL 参数organization
来设置。这允许每个租户的数据库使用应用程序中的相同代码,同时保持数据分离。
有时您需要在单个函数中与不同的数据库进行交互(特别是在集成系统或从不同来源读取数据时)。
默认情况下,所有控制器都将导入
MultiBindSQLAlchemy
。
# import multiple bindings
from app . mod_tenancy . multi_bind import MultiBindSQLAlchemy
在导入下有注释掉的代码,旨在帮助您在单个函数中快速实现到不同数据库的链接。首先,需要将数据库绑定添加到
SQLALCHEMY_BINDS
对象中。参考具有相同功能的独立数据库,以更好地了解如何将新数据库添加到SQLALCHEMY_BINDS
对象。
然后,您可以按照
db.<binding>
的结构创建一个附加到db
对象的新对象,例如:db.first
,其中first
是您想要在其余代码中引用绑定的名称。然后,您可以将此变量分配给MultiBindSQLAlchemy
例如:db.first = MultiBindSQLAlchemy('first')
。
现在,您可以调用自定义代码,这些代码将允许您访问新的数据库绑定以及单个函数中的主租户,例如:
db.first.execute(...)
,您可以在其中执行原始 SQL 代码。
db . first = MultiBindSQLAlchemy ( 'first' )
##################################################
## this will only work for the execute function ##
##################################################
db . first . execute (...)
**注意:** 这仅适用于
execute
函数,有一些高级技术仍然可以使用 SQLAlchemy ORM,可以在此处找到:SQLAlchemy 执行教程
模块是一个独立的组件,随着程序的增长更容易管理。 Flask-BDA 中的模块可帮助您创建:数据模型、路由以及用于控制逻辑和视图的相关函数。
创建新的 CRUD 模块时,文件夹
create_module_template
中的所有元素都会复制到应用程序目录中,并重命名为您提供的模块名称,方法是将所有xyz
值替换为您的模块名称并添加其他数据模型信息,如下所述
<Path To>/<my_awesome_project>/create_module_json.py
<Path To>/<my_awesome_project>/
是您创建的项目的路径 cd < Path To > / < my_awesome_project > /
python create_module_json . py - - module = Projects
Create new field Name (type the string : 'STOP_CREATING_FIELDS' to exit ): "name"
What datatype is name
Choose one of the following options
( 'String'
, 'Int'
, 'Float'
, 'Numeric'
, 'Text'
, 'Date'
, 'DateTime'
, 'Boolean'
, 'BigInt'
, 'Enum'
, 'JSON'
, 'LargeBinary' ): "String"
String Length ( 1 - 256 ): 256
Is name nullable ( 'True' , 'False' ): False
Is name unique ( 'True' , 'False' ): True
Does the name have a Relationship with another Data Model ? ( 'True' , 'False' ): False
Default value :
注意:这将继续循环,直到您输入并提交确切的单词:“STOP_CREATING_FIELDS”。
这使您可以快速轻松地为模块创建多个字段。
上面的字段应该显示您有不同的字段类型交互并创建多个字段。
注意:关系将始终根据所提供模型的
id
建立。在字段上创建ForeignKey,以及模型提供的
id
字段之间的惰性关系
Create new field Name (type the string : 'STOP_CREATING_FIELDS' to exit ): STOP_CREATING_FIELDS
Create module logic from Data Model ? ( 'True' , 'False' ): True
注意:您还可以从“app/generate_config/models//models.json”中的 JSON 文件生成模块,其中您输入的模块名称即可,打开并运行该文件:
<Path To>/<my_awesome_project>/create_module.py
* 其中<Path To>/<my_awesome_project>/
是您创建的项目的路径 * 填写说明,例如:
cd < Path To > / < my_awesome_project > /
python create_module . py - - module = projects
然后,这将创建所需的文件和文件夹,如应用程序更改中所述
create_module_template
文件夹中的文件和文件夹是为Projects
模块创建的,然后添加到app
文件夹中这将创建一个脚手架管理 CRUD 视图、一个 REST API(带有批量插入和更新)、一个 GraphQL API 以及面向公众的视图和逻辑,以允许您立即与您创建的模块进行交互。
在管理面板中,您将能够执行以下操作:新模块的创建、读取、更新和删除(“CRUD”)。
面向公众的视图允许访客用户(未登录的用户)查看所提供信息的视图
└── `my_awesome_project`
└── app
├── generated_config
│ └── models
│ └── `projects`
│ └── models.json
└── `mod_projects`
├── templates
│ ├── mobile
│ │ └── `projects`
│ │ ├── admin
│ │ │ ├── create.html
│ │ │ ├── edit.html
│ │ │ ├── index.html
│ │ │ └── show.html
│ │ └── public
│ │ └── public_list.html
│ └── `projects`
│ ├── admin
│ │ ├── create.html
│ │ ├── edit.html
│ │ ├── index.html
│ │ └── show.html
│ └── public
│ └── public_list.html
├── api_controllers.py
├── controllers.py
├── forms.py
├── models.py
└── types.py
创建新模块将为您提供 3 种与新系统交互的方式:
Public
、Admin
、REST API
和GraphQL API
。
要访问这些,他们将要求应用程序在环境中运行。
Public
视图是模块中提供的数据的未经身份验证的视图。
xyz
是模块的名称):../xyz/
public_list
Admin
视图是模块中提供的数据的经过身份验证的视图。
xyz
是模块的名称):../admin/xyz/
index
../admin/xyz/create
create
../admin/xyz/store
store
../admin/xyz/show/{id}
show
../admin/xyz/edit/{id}
edit
../admin/xyz/update/{id}
update
../admin/xyz/destroy/{id}
destroy
API
视图是 REST API 端点、相关文档和执行平台的列表。
Flask BDA 使用 SwaggerUI 向用户/客户端呈现 REST API。
SwaggerUI 允许任何人(无论是您的开发团队还是最终消费者)可视化 API 资源并与之交互,而无需任何实现逻辑。相反,它是根据 OpenAPI(以前称为 Swagger)规范自动生成的,并带有可视化文档,使后端实现和客户端使用变得轻松。
要访问 SwaggerUI:
<base_URL>/api/docs
以访问 SwaggerUI REST API,例如: http://localhost:5000/api/docs
。要在没有 SwaggerUI 的情况下访问 REST API:
<base_URL>/
../api/xyz
XyzListResource
> get
../api/xyz
XyzListResource
> post
../api/xyz/{id}
XyzResource
> get
../api/xyz/{id}
XyzResource
> update
../api/xyz/{id}
XyzResource
> delete
../api/xyz/bulk
XyzBulkListResource
> post
../api/xyz/bulk
XyzBulkListResource
> update
../api/xyz/aggregate
XyzAggregateResource
> get
graphql
视图是 GraphiQL 视图、API 端点、相关文档和执行平台。
Flask BDA 使用 graphene-python 和 GraphiQL 向用户/客户端呈现 GraphQL API,提供简单但可扩展的 API,使开发人员的生活更轻松。
GraphQL 是一种数据查询语言,提供了 REST 和即席 Web 服务架构的替代方案。
要访问 GraphiQL:
<base_URL>/graphql
来访问 GraphiQL、GraphQL API,例如: http://localhost:5000/graphql
。要在不使用 GraphQL 的情况下访问 GraphQL API:
<base_URL>/
../graphql
mod_graphql
> query
> Query
> all_xyz
../graphql
mod_graphql
> mutation
> Mutation
> createXyz
目前支持 7 个开箱即用的环境(计划很快支持更多环境),并提供有关如何为Windows / Linux / Mac
配置每个环境的说明,如果需要,您可以同时运行它们。
为了创建和开发本地应用程序,我们使用 virtualenv。用于创建隔离的虚拟 Python 环境的工具。
pip install --upgrade pip
cd <Path To>/my_awesome_project
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
venv S cripts a ctivate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
set FLASK_APP=app
set FLASK_ENV=development
flask run --port 5000
pip install --upgrade pip
sudo
运行命令,例如: sudo pip install --upgrade pip
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
export FLASK_APP=app
export FLASK_ENV=development
flask run --port 5000
一些共享托管服务提供在其服务器上运行 python 应用程序的能力。我个人使用过A2hosting。他们的支持令人惊叹,而且功能价格是我见过的最好的价格之一。
注意:您不限于 A2 作为共享托管选项。然而,这是我测试 Flask-BDA 的地方,并且有上传和运行共享托管选项的经验。如果您的共享托管选项提供了一组类似的功能,请随意使用它们。
对于 A2,您需要设置服务器来运行 python 应用程序,这可能需要一些配置。
要使您的自定义应用程序正常工作:
注意:在
Linux
环境中,默认情况下pyodbc
要求不起作用。因此,作为共享环境,您可能无权添加要求以使其正常工作,确保安装不会失败的最简单方法是在服务器上注释掉此要求。
requirements.txt
文件,搜索pyodbc
并在包名称前添加一个带有空格的#
。 # pyodbc==4.0.30
requirements.txt
安装环境要求(类似于本地环境)SSH
窗口中运行此命令pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
Setup Python App
Application startup file
更改为run_shared_server.py
为了创建和部署容器化应用程序,我们使用 Docker,它可以帮助开发人员和开发团队构建和发布应用程序。此外,Docker还用于容器化应用程序和微服务的构建和共享。
注意:如果您使用 Github 并安装了 docker(稍后会在文档中详细介绍如何安装),每次在 Github 上
push
或执行pull_request
时,您都会得到一个构建的新镜像,该镜像在文件中设置:docker-image.yml
但是,如果您想手动执行此操作,请按照以下步骤操作:
cd < Path To > /my_awesome_project
docker build -t flask_app:latest .
docker run -p 5000:5000 flask_app
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl start docker
cd < Path To > /my_awesome_project
docker build -t flask_app:latest .
docker run -it -p 5000:5000 flask_app
注:仍在开发中
为了创建和部署无服务器应用程序,我们使用无服务器框架,它允许零摩擦无服务器开发,使您可以轻松构建在低成本的下一代云基础设施上自动扩展的应用程序。
无服务器框架是一种开源工具,可提供简单的 YAML + CLI 开发和部署到 AWS、Azure、Google Cloud、Knative 等。
注意:您可能需要在 del=polying 之前调整默认数据库字符串,因为无服务器不支持“SQLite”,因为该函数不保留状态。
更新数据库字符串,请参考【配置】
npm update -g serverless
npm update -g serverless
choco install serverless
注意:如果未安装该软件包,您可能需要以管理员身份运行该命令。
按“Windows键”输入“cmd”,在“命令提示符”一词上“右键单击”并选择“以管理员身份运行”选项,然后再次按照前面的步骤操作
serverless
cd < Path To > /my_awesome_project
sls plugin install -n serverless-python-requirements
sls plugin install -n serverless-wsgi
serverless deploy
curl -o- -L https://slss.io/install | bash
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
systemctl start docker
cd < Path To > /my_awesome_project
sls plugin install -n serverless-python-requirements
sls plugin install -n serverless-wsgi
serverless deploy
注:仍在开发中
Digital Ocean 是一个平台即服务 (PaaS)。在 DigitalOcean 的完整云平台上开发、管理和扩展您的应用程序。 Digital Ocean 为您提供简单、可预测的定价。使用云中的可扩展计算产品、完全托管的数据库、高度可用且可扩展的存储选项等,自信地构建和发布。通过具有适当内存量的虚拟机来托管和扩展应用程序和数据库,Digital Ocean 为复杂问题提供了简单的解决方案。
要从终端创建应用程序并将其部署到 Heroku,您需要:
138.197.67.25
注意,如果您尚未通过 SSH 连接,您应该通过注册 Digital Ocean 帐户的电子邮件收到
password
。
cd < Path To > / < my_awesome_project > /
scp -r < my_awesome_project > root@ < ip_address > :/
ssh root@ < ip_address >
其中
<Path To>/<my_awesome_project>/
是您创建的项目的路径,其中<ip_address>
是 Droplet <ip_address> 例如:138.197.67.25
注意:按照 ssh 出现的任何提示进行操作,例如允许从远程服务器进行访问。
登录后,您应该能够看到一个带有以下内容的终端:
root@ < droplet_name > :
cd < Path To > / < my_awesome_project > /
chmod +x setup.sh
bash setup.sh
virtualenv venv
source venv/bin/activate
sudo pip install --upgrade pip
sudo pip install --no-cache-dir -r requirements.txt
sudo pip install uwsgi
sudo ufw allow 5000
export FLASK_APP=app
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
其中
5000
是端口号<droplet_name>
是名称
cd < Path To > / < my_awesome_project > /
scp -r < my_awesome_project > root@ < ip_address > :/
ssh root@ < ip_address >
其中
<Path To>/<my_awesome_project>/
是您创建项目的路径,其中<ip_address>
是液滴<ip_address> eg:138.197.67.25
注意:遵循SSH保留的任何提示,例如允许从远程服务器访问。
登录后,您应该能够看到一个终端:
root@ < droplet_name > :
cd < Path To > / < my_awesome_project > /
chmod +x setup.sh
bash setup.sh
virtualenv venv
source venv/bin/activate
sudo pip install --upgrade pip
sudo pip install --no-cache-dir -r requirements.txt
sudo pip install uwsgi
sudo ufw allow 5000
export FLASK_APP=app
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
其中
5000
是端口号
和<droplet_name>
是名称
注意:仍在开发中
Heroku是一个服务(PAA)的平台。 Heroku允许您从零承诺开始,无锁时付款。开发人员,团队和各种规模的业务可以使用Heroku来部署,管理和扩展应用程序。无论您是构建简单的原型还是关键业务产品,Heroku的完全管理的平台都可以为您提供快速交付应用程序的简单途径。
要从终端创建并部署到Heroku的应用程序,您需要下载并安装Heroku CLI。要验证安装,您可以从终端检查Heroku版本:
heroku --version
注意:确保您已更改了数据库连接,因为Heroku不建议使用SQLite,因为数据可能会丢失在文件上。 Heroku确实提供了一个免费的Postgres数据库。查看他们的计划并为您选择正确的计划,因为不同计划有限制。
cd < Path To > /my_awesome_project
heroku login
<my_awesome_project-flask-bda-app>
,其中<my_awesome_project-flask-bda-app>
是您给项目的名称。heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
是您给您的项目的名称。 cd < Path To > /my_awesome_project
sudo snap install --classic heroku
heroku login
<my_awesome_project-flask-bda-app>
,其中<my_awesome_project-flask-bda-app>
是您给项目的名称。heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
是您给您的项目的名称。 cd < Path To > /my_awesome_project
brew tap heroku/brew && brew install heroku
heroku login
<my_awesome_project-flask-bda-app>
,其中<my_awesome_project-flask-bda-app>
是您给项目的名称。heroku create my_awesome_project-flask-bda-app
git push heroku master
<my_awesome_project-flask-bda-app>
是您给您的项目的名称。 对于本机移动应用程序,我们正在使用React-Native。具体来说,我们将EXPO用作通用反应应用程序的框架和平台。这是一组围绕React和本机平台构建的工具和服务,可帮助您从同一JavaScript/Typescript代码库中开发,构建,部署和快速迭代iOS,Android和Web应用程序。
我们有预先推送通知,因此您不必这样做。这意味着您可以更快,更容易启动和运行。此外,我们正在利用它允许简化的实现和方法来利用默认的博览会软件包。
优点包括更快的构建和测试工作流程/过程,远程测试在开发空气(OTA)更新时,在开发过程中可见可见的变化。
但是,存在一些缺点,局限性博览会意识到了这些,并很好地描述了它们。我们建议在使用我们的预构建方法之前审查这些限制。
构建一个在所有用户设备上本地运行的项目。
cd < Path To > /my_awesome_project_mobile_app
npm install -g expo-cli
npm install
cd < Path To > /my_awesome_project_mobile_app
npm install -g expo-cli
npm install
由于Blask BDA不规定您应该在哪里托管网站,因此您需要告诉移动应用程序去哪里。
在QuickStart示例中,我们创建了一个名为
"My Awesome Project"
的项目。但是,您可能已经将项目称为其他。这将创建一个文件夹,其中名称全部在较低的情况下并剥离了所有特殊字符,并用下划线(例如:my_awesome_project
代替了空格。
对于移动设备,我们将自动创建一个单独的
"_mobile_app"
文件夹,其中文件夹的前缀是您的项目名称,例如my_awesome_project_mobile_app
。这是为了防止Serverless
配置package.json
的问题。
如果您仍在开发和/或尚未选择托管服务提供商,则可以使用:Ngrok创建一个临时的公共开发URL,该URL隧道为您的本地环境。 Ngrok通过安全的隧道将本地服务器曝光到NAT和防火墙后面的公共互联网。这使您可以在公共URL上演示网站,并测试连接到本地运行后端的移动应用程序而无需部署。
通过遵循本地环境说明来启动本地开发服务器
如果您以前尚未注册Ngrok:
如果您已经注册但没有安装它:
NGROK终端打开后,创建从您的本地服务器到Ngrok的隧道
5000
更改为端口号,请替换http
之后的号码以允许创建正确的隧道。 ngrok http 5000
ngrok by @inconshreveable
(Ctrl+C to quit)
Session Status online
Session Expires 1 hour, 59 minutes
Version 2.3.40
Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://573d4ec93267.ngrok.io - > http://localhost:5000
Forwarding https://573d4ec93267.ngrok.io - > http://localhost:5000
Connections
ttl opn rt1 rt5 p50 p90
0 0 0.00 0.00 0.00 0.00
注意:免费版本只能使该服务器存活2个小时,因此您可能需要在将来遵循此过程,如果将此URL推入您的“ repo”,则可能对下一个人不起作用。
my_awesome_project_mobile_app
app.json
文件并编辑第2行"server_base_url": "https://github.com/RyanJulyan/Flask-BDA"
通过替换https://github.com/RyanJulyan/Flask-BDA
服务器名称。expo
应用程序:iOS
转到:https://apps.apple.com/app/apple-store/id982107779Android
转到:https://play.google.com/store/apps/details?id=host.exp.exponent在手机上安装了应用程序后,您可以在本地计算机上启动开发服务器。
cd < Path To > /my_awesome_project_mobile_app
expo start
cd < Path To > /my_awesome_project_mobile_app
expo start
这将打开一个带有QR码的网页。如果您在Android上,则可以使用Expo应用程序,如果您在iOS上使用相机来扫描代码并直接从开发服务器打开应用程序。
注意:如果您希望不在网络上的人能够远程扫描和测试应用程序,请按QR码上方的
tunnel
选项卡按钮。
建议的一部分是确保对图像进行优化。为此,该博览会推荐了可以帮助优化图像的展览包装。此外,优化图像可以改善您的本地应用TTI(或交流时间),这意味着在溅起屏幕上更少的时间,而在不良网络连接上更快地交付。
cd < Path To > /my_awesome_project_mobile_app
npm install -g sharp-cli
npx expo-optimize --quality 0.9
cd < Path To > /my_awesome_project_mobile_app
npm install -g sharp-cli
npx expo-optimize --quality 0.9
为了创建和开发桌面应用程序,我们正在使用BlaskWebGui。一种用于在Chrome包装器中创建和运行烧瓶Web应用程序的工具。要分发桌面应用程序,我们正在使用Pyinstaller。 Pyinstaller将Python应用程序冻结到Windows,GNU/Linux,Mac OS X,FreeBSD,Solaris和AIX下的独立可执行文件中。
每个部署都需要在您希望运行的特定平台上创建。我们创建了脚本,可以通过将
build
和dist
文件夹放置在相应平台的父文件夹中来管理这些部署。这些文件夹将带有desktop_
的前缀,然后是平台。这纯粹是为了使您能够管理特定平台的分布并构建流程,而不是在不同平台上构建它们时覆盖它们。
为了使导出到桌面正确工作,我们需要一些代码更改。默认情况下,Blask-BDA旨在用于Web和移动开发,我们已经在网站上实施了限制者。不幸的是,您需要服务器来限制限制,并且由于将系统导出到桌面应用程序,因此它没有运行服务器。
因此,您需要删除所有对限制器的引用。这些可以在
app/__init__.py
上找到。为此,请在文本编辑器中打开文件,然后评论以下几行:
# from flask_limiter import Limiter
# from flask_limiter.util import get_remote_address
# limiter = Limiter(
# app,
# key_func=get_remote_address,
# default_limits=app.config['DEFAULT_LIMITS']
# )
注意:如果添加了自定义限制器,请搜索
@limiter.limit
,该限制器可以在您的控制器中找到。您将需要评论所有这些参考和导入参考,例如:from app import limiter
这将使您可以无错误地将应用程序导出为桌面可执行文件。
pip install --upgrade pip
cd <Path To>/my_awesome_project
运行时,您可能需要导航到您的项目 cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
venv S cripts a ctivate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_windows.py
pip install --upgrade pip
sudo
,例如: sudo pip install --upgrade pip
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_lunix.py
pip install --upgrade pip
sudo
,例如: sudo pip install --upgrade pip
cd < Path To > /my_awesome_project
pip install --upgrade pip
pip install virtualenv
virtualenv venv
source venv/bin/activate
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt
python create_desktop_installer_mac.py
这将打开一个最大化的窗口,该窗口将像普通的桌面应用程序一样运行。这将使用本地安装的Chrome浏览器为内容提供服务。
默认情况下,此应用程序将在端口
7000
上提供。但是,如果与任何现有应用程序发生冲突,则可以在run_desktop.py
文件中编辑端口。
如果您在项目中包括其他Python软件包,请不要忘记从终端冻结
pip freeze
,以确保您获得正确的部署软件包
pip freeze > requirements.txt
注意:建议您从虚拟环境而不是全球安装并冻结其他Python软件包。这会保持您的
requirements.txt
很小,仅限于您在特定项目中使用的软件包。
Blask BDA默认使用Swaggerui来协助并将API呈现给用户/客户端。
Swaggerui允许任何人 - 无论是您的开发团队还是您的最终消费者)可以在没有任何实施逻辑的情况下与API资源进行可视化和互动。取而代之的是,它是由您的OpenAPI(以前称为Swagger)规范生成的,具有视觉文档使其易于后端实现和客户端消费。
访问Swaggerui:
<base_URL>/api/docs
以访问Swaggerui API,例如: http://localhost:5000/api/docs
许多开发人员将宁愿邮递员而不是Swaggerui来测试和集成API与其代码。我们通过为Postman提供直接收集出口来协助。
在Postman上导入该集合:
Import...
(CTRL+O)Link
<base_URL>/api/postman
例如: http://localhost:5000/api/postman
<base_URL>/aswagger.json
EG: http://localhost:5000/swagger.json
,并将其直接导入到Postman中https://learning.postman.com/docs/getting-started/importing-and-exporting-data/#converting-postman-collections-from-v1-to-v2
npm install -g postman-collection-transformer
postman-collection-transformer convert -i <path to the input Postman collection file> -o <path to the downloaded Postman file> -j 1.0.0 -p 2.0.0 -P
<path to the input Postman collection file>
和<path to the downloaded Postman file>
是本地计算机上的物理文件路径。Continue
Import
这将导入一个邮政集合,该集合将在左侧作为文件夹可用(您创建的每个端点的子文件夹)。
您可以使用Postman生成许多不同的巷道和框架的代码。这些语言包括但不限于:
允许您将新创建的API与现有项目集成
有时,您需要提出外部请求(例如外部API)。您可以使用AJAX请求进行处理,但是有时您需要从服务器端进行这些请求,例如,如果您想自动更新货币转换。当您想通过服务器访问外部API时,您不想依靠用户积极地在网页上发送命令。相反,您希望服务器能够激活此评论。为此,我们使用请求模块。
import requests
requests . methodname ( params )
import requests
params = { "model" : "Mustang" }
x = requests . get ( 'https://w3schools.com/python/demopage.php' , params = params )
print ( x . status_code )
print ( x . text )
import requests
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . post ( 'https://w3schools.com/python/demopage.php' , data = data , headers = headers )
print ( x . status_code )
print ( x . text )
import requests
import json
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . post ( 'https://w3schools.com/python/demopage.php' , json = data , headers = headers )
print ( x . status_code )
print ( x . text )
# use this to load JSON returned as a python dictionary
return_data = json . loads ( x . text )
import requests
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . put ( 'https://w3schools.com/python/demopage.php' , data = data , headers = headers )
print ( x . status_code )
print ( x . text )
import requests
import json
data = { "Name" : "Example" }
headers = { "Authorization" : "Bearer <token>" }
x = requests . put ( 'https://w3schools.com/python/demopage.php' , json = data , headers = headers )
print ( x . status_code )
print ( x . text )
# use this to load JSON returned as a python dictionary
return_data = json . loads ( x . text )
import requests
x = requests . delete ( 'https://w3schools.com/python/demopage.php' )
print ( x . status_code )
print ( x . text )
AJAX请求通常是JavaScript中(浏览器)在JavaScript中提出的HTTP请求,该请求使用XML/JSON从内部或外部系统请求数据和/或响应数据。默认情况下,使用</> htmx提出AJAX请求。
HTMX是一个无依赖性库,允许您使用属性直接访问HTML中的Ajax,CSS过渡,Websockets和服务器式事件,以便您可以构建具有超文本的简单和功能的现代用户接口。有关如何使用HTMX的详细信息,请参阅文档并有关该功能的完整参考,请参阅https://htmx.org/reference/
您可以使用HTMX实现许多常见的UX模式,例如活动搜索:
< input type =" text " name =" q "
hx-get =" /trigger_delay "
hx-trigger =" keyup changed delay:500ms "
hx-target =" #search-results "
placeholder =" Search... " />
< div id =" search-results " > </ div >
如果已更改输入并将结果插入ID搜索库中,则该命名Q的输入将在关键事件后向/trigger_delay
500毫秒发布。
尽管对称加密具有优势,但这种方法中存在一个缺陷,允许未经授权的个人访问消息的秘密键。
防止未经授权访问消息的秘密密钥的最有效方法之一是实现像Diffie-Hellman算法这样的单向函数。此方法仅允许发件人和接收器解密消息。
通常使用类型的算法实现单向函数,该算法允许他们计算收到的每个输入的输出。但是,此方法是不可行的,无法从随机键中得出确切的结果。
测试是确保项目成功运行的重要组成部分
烧瓶BDA提供了三个方面:
注意:要手动运行Python
unittest
,请确保您已经安装了本地环境
cd < Path To > /my_awesome_project
venv S cripts a ctivate
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 . --count --exit-zero --max-complexity=11 --max-line-length=127 --statistics
cd < Path To > /my_awesome_project
source venv/bin/activate
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
注意:要手动运行Python
unittest
,请确保您已经安装了本地环境
cd < Path To > /my_awesome_project
venv S cripts a ctivate
python -m unittest discover
cd < Path To > /my_awesome_project
venv/bin/activate
python -m unittest discover
单文件运行和设置
起动烧瓶项目,该项目构建了一个项目文件夹结构
992px
的平板电脑为中心500px
的手机为中心@mobile_template
装饰器,允许根据需要为更好的移动体验而定制模板视图。{% if request.MOBILE %}True{% else %}False{% endif %}
config.py
用于快速访问和管理环境和环境变量以及默认的SEOconfig.py
调试内置并可以访问创建自定义模块文件和文件夹,这些文件和文件夹从create_module.py
文件中适合烧瓶项目结构,并带有提示以创建以下内容:
public_list
index
create
store
show
edit
update
destroy
get
post
get
update
delete
event listeners
before
和after
预先配置了:Insert
Update
Delete
public_list
index
create
store
show
edit
update
destroy
get
post
get
update
delete
post
update
get
public_list.html
(列表元素)index.html
(列表元素)create.html
(单元素表单)show.html
(单元素)edit.html
(单元素形式)api/docs
(URL)浏览器支持(最后1个主要版本未死)
└── `project_name`
├── .github
│ └── workflows
│ ├── docker-image.yml
│ └── run_tests.yml
├── app
│ ├── generated_config
│ │ ├── model_editor
│ │ └── models
│ │ ├── hierarchies
│ │ │ └── models.json
│ │ └── organisations
│ │ └── models.json
│ ├── mod_audit
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ └── models.py
│ ├── mod_users
│ │ ├── templates
│ │ │ ├── mobile
│ │ │ │ └── auth
│ │ │ │ ├── admin
│ │ │ │ │ ├── create.html
│ │ │ │ │ ├── edit.html
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── show.html
│ │ │ │ └── public
│ │ │ │ └── public_list.html
│ │ │ ├── email
│ │ │ │ ├── activate.html
│ │ │ │ └── reset.html
│ │ │ └── users
│ │ │ ├── admin
│ │ │ │ ├── create.html
│ │ │ │ ├── edit.html
│ │ │ │ ├── index.html
│ │ │ │ └── show.html
│ │ │ └── public
│ │ │ └── public_list.html
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ ├── forms.py
│ │ └── models.py
│ ├── mod_email
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ └── models.py
│ ├── mod_file_upload
│ │ ├── templates
│ │ │ └── file_upload
│ │ │ └── upload.html
│ │ ├── __init__.py
│ │ ├── controllers.py
│ │ ├── forms.py
│ │ └── models.py
│ ├── static
│ │ ├── css
│ │ ├── images
│ │ ├── js
│ │ ├── manifest.json
│ │ └── sw.js
│ ├── templates
│ │ ├── admin
│ │ │ └── index.html
│ │ ├── email
│ │ │ └── auth
│ │ │ ├── activate.html
│ │ │ └── reset.html
│ │ ├── mobile
│ │ ├── public
│ │ │ └── index.html
│ │ ├── 403.html
│ │ ├── 404.html
│ │ └── index.html
│ └── __init__.py
├── create_module_template
│ ├── generated_config
│ │ └── models
│ │ └── xyz
│ │ └── models.json
│ └── mod_xyz
│ ├── templates
│ │ ├── mobile
│ │ │ └── xyz
│ │ │ ├── admin
│ │ │ │ ├── create.html
│ │ │ │ ├── edit.html
│ │ │ │ ├── index.html
│ │ │ │ └── show.html
│ │ │ └── public
│ │ │ └── public_list.html
│ │ └── xyz
│ │ ├── admin
│ │ │ ├── create.html
│ │ │ ├── edit.html
│ │ │ ├── index.html
│ │ │ └── show.html
│ │ └── public
│ │ └── public_list.html
│ ├── api_controllers.py
│ ├── controllers.py
│ ├── forms.py
│ └── models.py
├── databases
│ └── sqlite
│ ├── core.db
│ └── default.db
├── .dockerignore
├── .gitignore
├── config.py
├── create_all_models_json.py
├── create_desktop_installer_lunix.py
├── create_desktop_installer_mac.py
├── create_desktop_installer_windows.py
├── create_module.py
├── create_module_json.py
├── Dockerfile
├── FLASK-BDA LICENSE
├── LICENSE
├── package.json
├── package-lock.json
├── Procfile
├── README.md
├── requirements.txt
├── run.py
├── run_desktop.py
├── run_shared_server.py
└── serverless.yml
模块是程序的一部分。程序由一个或多个独立开发的模块组成,这些模块在组合后创建程序。
模块是一个独立的组件,可以随着程序的增长而更容易管理。
Blask-BDA中的模块可帮助您创建:数据模型,路由和关联的功能,用于控制逻辑和视图
控制器可以将相关请求处理逻辑分组为单个类。例如,UserController类可能会处理与用户相关的所有传入请求,包括显示,创建,更新和删除用户。
创建,读取,更新和删除(“ crud”)
覆盖是对您的源代码的自动检查,以解决程序化和风格错误。这是通过使用棉绒工具(也称为Linter)来完成的。皮棉工具是基本的静态代码分析仪。
棉绒或衬里是一种静态代码分析工具,用于标记编程错误,错误,风格错误和可疑结构。
在计算机编程中,单元测试是一种软件测试方法。
一个低代码开发平台提供了一个开发环境,可以通过程序化或图形用户界面和配置而不是传统的手工编码计算机编程来创建应用程序软件。
如果您以一种或所有这些方式为该项目做出了贡献,我们将感到高兴:
查看Python 3的许可证信息(https://docs.python.org/3.8/license.html)和其他法律协议(https://www.pypython.org/about/legal/)
查看Docker的许可证信息。 (https://www.docker.com/legal/components-licenses)和其他法律协议(https://www.docker.com/legal)
与所有Docker映像一样,这些可能还包含其他软件,这些软件可能来自其他许可(例如,从基本分配中,以及所包含的主要软件的任何直接或间接依赖项)。
可以自动检测的一些其他许可信息可以在Repo-Info存储库的Python/ Directory中找到。
至于任何预构建的图像使用情况,图像用户的责任是确保使用此图像的任何使用都符合内部包含的所有软件的任何相关许可。
查看无服务器框架和其他法律协议的许可信息(https://app.serverless.com/legal/terms)。
用户有责任确保遵守可接受的使用策略(https://app.serverless.com/legal/aup)
查看世博框架和其他法律协议的许可证信息(https://github.com/expo/expo/expo/blob/master/license)。
Blask-BDA是根据开发人员友好的Blask-BDA许可证创建和分发的。 Blask-BDA许可证始于流行的Apache 2.0许可证。
Blask-BDA许可证是您或您的公司使用和分发烧瓶BDA和衍生作品(例如您使用的应用程序)的法律要求。您的申请或项目可能具有不同的许可证,但仍需要遵守原始许可证。
许可证和版权通知包含
Blask-BDA许可证要求您必须在所有使用Blask-bda创建的衍生作品中包括所有副本BDA的许可证和版权通知。由您决定如何分发许可证和通知。以下是如何完成此操作的一些示例:
版权所有2021 Blask-bda,Ryan Julyan,根据烧瓶-BDA许可证版本0.1(“许可证”)获得许可;除了符合许可外,您不得使用Flask-BDA
。您可以通过https://github.com/RyanJulyan/Flask-BDA/blob/main/LICENSE
获得许可证的副本按照“基础,没有任何明示或暗示的任何形式的保证或条件。请参阅许可证,了解许可证下管理权限和限制的特定语言。