注意:仍在開發中!
目前版本: 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>
是 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>
是名稱
註:仍在開發中
Heroku 是一個平台即服務 (PaaS)。 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 應用程式的框架和平台。它是一組圍繞 React Native 和本機平台構建的工具和服務,可幫助您從相同 JavaScript/TypeScript 程式碼庫在 iOS、Android 和 Web 應用程式上開發、建置、部署和快速迭代。
我們已經預先設定了推播通知,因此您無需這樣做。這意味著您可以更快、更輕鬆地開始、啟動和運行。此外,我們正在利用預設的 expo-notifications 套件,它可以簡化實作和方法。
優點包括更快的建置和測試工作流程/流程、使用無線 (OTA) 更新進行開發時的遠端測試,以及在開發過程中儲存時可見的變更。
然而,它也有一些缺點,Expo 意識到了這些缺點並對其進行了很好的描述。我們建議在使用我們預先建立的方法之前檢查這些限制。
建置一個可在所有使用者裝置上本機運作的專案。
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
因為 Flask BDA 沒有規定您應該在哪裡託管您的網站,所以您需要告訴您的行動應用程式去哪裡。
在快速入門範例中,我們建立了一個名為
"My Awesome Project"
的專案。但是,您可能會將該項目稱為其他名稱。這將建立一個資料夾,其中名稱全部為小寫,並刪除所有特殊字符,並用下劃線替換空格,例如:my_awesome_project
。
對於行動設備,我們將自動建立一個單獨的
"_mobile_app"
資料夾,其中該資料夾的前綴是您的專案名稱,例如my_awesome_project_mobile_app
。這是為了防止Serverless
配置package.json
出現問題,並允許您不必將行動應用程式的所有程式碼部署到 Web 伺服器上。
如果您仍處於開發階段和/或尚未選擇託管服務供應商,您可以使用:Ngrok 建立一個透過隧道連接到本機環境的臨時公共開發 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
App: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
這將打開一個帶有二維碼的網頁。這將允許您使用 Expo 應用程式(如果您使用的是 Android)或使用相機(如果您使用的是 iOS)來掃描程式碼並直接從開發伺服器開啟您的應用程式。
注意:如果您希望不在您網路上的人能夠遠端掃描和測試應用程序,請按二維碼上方的
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
為了創建和開發桌面應用程序,我們使用flaskwebgui。用於在 Chrome 包裝器中建立和執行 Flask Web 應用程式的工具。為了分發桌面應用程序,我們使用 PyInstaller。 PyInstaller 將 Python 應用程式凍結(打包)為 Windows、GNU/Linux、Mac OS X、FreeBSD、Solaris 和 AIX 下的獨立執行檔。
每個部署都需要在您希望運行它的特定平台上建立。我們創建了腳本,讓您可以透過將
build
和dist
資料夾放入相應平台的父資料夾中來管理這些部署。這些資料夾將以desktop_
為前綴,後面跟著平台。這樣做純粹是為了讓您管理特定平台的分發和建置流程,並且在不同平台上建置時不會覆蓋它們。
為了使匯出到桌面能夠正常運作,我們需要更改一些程式碼。預設情況下,Flask-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
很小並且僅限於您在特定專案中使用的套件。
Flask BDA 預設使用 SwaggerUI 來協助並向使用者/客戶端呈現 API。
SwaggerUI 允許任何人(無論是您的開發團隊還是最終消費者)視覺化 API 資源並與之交互,而無需任何實作邏輯。相反,它是根據 OpenAPI(以前稱為 Swagger)規範自動生成的,並帶有可視化文檔,使後端實現和客戶端使用變得輕鬆。
造訪 SwaggerUI:
<base_URL>/api/docs
以存取 SwaggerUI API,例如: http://localhost:5000/api/docs
許多開發人員會更喜歡 Postman 而不是 SwaggerUI 來測試 API 並將其與他們的程式碼整合。我們透過為 Postman 提供直接託收導出來提供協助。
要在 Postman 上匯入集合:
Import...
(CTRL+O)Link
<base_URL>/api/postman
例如: http://localhost:5000/api/postman
<base_URL>/aswagger.json
例如: http://localhost:5000/swagger.json
並將其直接匯入 Postmanhttps://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 時,您不希望依賴使用者主動在網頁上傳送命令。相反,您希望伺服器能夠啟動此評論。為了實現這一點,我們使用 requests 模組。
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 中發出的 HTTP 請求,它使用 XML/JSON 從內部或外部系統請求資料和/或回應資料。預設情況下,Ajax 請求是使用 </> htmx 發出的。
htmx 是一個無依賴性函式庫,可讓您使用屬性直接在 HTML 中存取 AJAX、CSS 轉換、WebSocket 和伺服器發送事件,以便您可以建立具有超文本的簡單性和強大功能的現代使用者介面。有關如何使用 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 >
如果輸入已更改,則此名為 q 的輸入將在按鍵事件後 500 毫秒向/trigger_delay
發出請求,並將結果插入具有 id search-results 的 div 中。
儘管對稱加密有許多優點,但這種方法有一個缺陷,即允許未經授權的個人存取訊息的金鑰。
防止未經授權存取訊息金鑰的最有效方法之一是實作單向函數,例如 Diffie-Hellman 演算法。此方法僅允許發送者和接收者解密訊息。
單向函數通常使用一種演算法來實現,該演算法允許它們為收到的每個輸入計算輸出。然而,這種方法無法從隨機密鑰得出準確的結果。
測試是確保專案成功運行的重要組成部分
Flask BDA 提供了 3 個面向的測試:
注意:要手動執行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
單一文件運行和設置
Starter Flask 項目,它建構了一個專案資料夾結構
992px
平板電腦為中心500px
行動裝置為中心@mobile_template
裝飾器,允許根據需要自訂模板視圖以獲得更好的移動體驗。{% if request.MOBILE %}True{% else %}False{% endif %}
config.py
用於快速存取和管理環境和環境變數以及預設SEOconfig.py
進行存取從create_module.py
檔案建立適合 Flask 專案結構的自訂模組檔案和資料夾,並提示建立以下內容:
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
(網址)瀏覽器支援(最後 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
模組是程式的一部分。程式由一個或多個獨立開發的模組組成,這些模組組合起來即可建立程式。
模組是一個獨立的元件,隨著程式的成長更容易管理。
Flask-BDA 中的模組可協助您建立:資料模型、路由以及用於控制邏輯和視圖的關聯函數
控制器可以將相關的請求處理邏輯分組到單一類別中。例如,UserController 類別可能會處理與使用者相關的所有傳入請求,包括顯示、建立、更新和刪除使用者。
建立、讀取、更新和刪除(“CRUD”)
Linting 是自動檢查原始程式碼中的程式錯誤和風格錯誤。這是透過使用 lint 工具(也稱為 linter)來完成的。 lint 工具是一個基本的靜態程式碼分析器。
lint 或 linter 是一種靜態程式碼分析工具,用於標記程式錯誤、錯誤、風格錯誤和可疑結構。
在電腦程式設計中,單元測試是一種軟體測試方法,透過該方法對原始程式碼的各個單元(一個或多個電腦程式模組的集合以及相關的控制資料、使用過程和操作過程)進行測試,以確定它們是否適合使用。
低程式碼開發平台提供了一個開發環境,可以透過程式設計或圖形使用者介面和配置而不是傳統的手動編碼電腦程式來創建應用程式軟體。
如果您透過以下一種或所有方式為該專案做出貢獻,我們將非常高興:
查看 Python 3 的授權資訊 (https://docs.python.org/3.8/license.html) 和其他法律協議 (https://www.python.org/about/legal/)
查看 Docker 的許可證資訊。 (https://www.docker.com/legal/components-licenses) 和其他法律協議 (https://www.docker.com/legal)
與所有 Docker 映像一樣,這些映像可能還包含其他許可下的其他軟體(例如來自基本發行版的 Bash 等,以及所包含的主要軟體的任何直接或間接依賴項)。
可以在 repo-info 儲存庫的 python/ 目錄中找到一些可以自動偵測的附加授權資訊。
對於任何預先建構影像的使用,影像使用者的責任是確保對此影像的任何使用均符合其中包含的所有軟體的任何相關許可。
查看無伺服器框架和其他法律協議的授權資訊 (https://app.serverless.com/legal/terms)。
使用者有責任確保遵守可接受的使用政策 (https://app.serverless.com/legal/aup)
查看 Expo 框架和其他法律協議的授權資訊 (https://github.com/expo/expo/blob/master/LICENSE)。
Flask-BDA 是根據開發人員友好的 Flask-BDA 許可證創建和分發的。 Flask-BDA 授權源自於流行的 Apache 2.0 授權。
Flask-BDA 授權是您或您的公司使用和散佈 Flask-BDA 及衍生作品(例如您用它製作的應用程式)的法律要求。您的應用程式或專案可以有不同的許可證,但仍需要符合原始許可證。
包含許可和版權聲明
Flask-BDA 許可證要求您必須在 Flask-BDA 的所有副本以及使用 Flask-BDA 創建的任何派生作品中包含許可證和版權聲明。您可以決定如何分發許可證和通知。以下是如何做到這一點的一些範例:
版權所有 2021 Flask-BDA,Ryan Julyan 根據 Flask-BDA 許可證版本 0.1(「許可證」)獲得許可;除非遵守許可證,否則您不得使用Flask-BDA
。您可以在https://github.com/RyanJulyan/Flask-BDA/blob/main/LICENSE
取得許可證副本,除非適用法律要求或書面同意,否則根據許可證分發的軟體將在「按「現狀」為基礎,不提供任何明示或暗示的保證或條件。請參閱許可證,了解許可證下管理權限和限制的特定語言。