大型應用程式作為套件¶
想像一下一個簡單的 Flask 應用程式結構,看起來像這樣
/yourapplication
yourapplication.py
/static
style.css
/templates
layout.html
index.html
login.html
...
雖然這對於小型應用程式來說還可以,但對於較大型的應用程式來說,最好使用套件而不是模組。《教學》的結構設計為使用套件模式,請參閱範例程式碼。
簡單套件¶
要將其轉換為更大的套件,只需在現有的資料夾內建立一個新的資料夾 yourapplication
,並將其下的所有內容移動進去。然後將 yourapplication.py
重新命名為 __init__.py
。(請務必先刪除所有 .pyc
檔案,否則很可能會出錯)
然後您應該會得到類似這樣的結果
/yourapplication
/yourapplication
__init__.py
/static
style.css
/templates
layout.html
index.html
login.html
...
但是現在您要如何執行您的應用程式呢?天真的 python yourapplication/__init__.py
將無法運作。我們就說 Python 不希望套件中的模組成為啟動檔案。但這不是一個大問題,只需在內部的 yourapplication
資料夾旁邊新增一個名為 pyproject.toml
的檔案,內容如下
[project]
name = "yourapplication"
dependencies = [
"flask",
]
[build-system]
requires = ["flit_core<4"]
build-backend = "flit_core.buildapi"
安裝您的應用程式,使其可匯入
$ pip install -e .
要使用 flask
命令並執行您的應用程式,您需要設定 --app
選項,告訴 Flask 在哪裡找到應用程式實例
$ flask --app yourapplication run
我們從中獲得了什麼?現在我們可以將應用程式稍微重組為多個模組。您唯一要記住的是以下快速檢查清單
Flask
應用程式物件的建立必須在__init__.py
檔案中。這樣一來,每個模組都可以安全地匯入它,並且__name__
變數將解析為正確的套件。所有視圖函式(頂部帶有
route()
裝飾器的那些)都必須在__init__.py
檔案中匯入。不是物件本身,而是它所在的模組。在建立應用程式物件之後匯入視圖模組。
以下是一個 __init__.py
的範例
from flask import Flask
app = Flask(__name__)
import yourapplication.views
這就是 views.py
的樣子
from yourapplication import app
@app.route('/')
def index():
return 'Hello World!'
然後您應該會得到類似這樣的結果
/yourapplication
pyproject.toml
/yourapplication
__init__.py
views.py
/static
style.css
/templates
layout.html
index.html
login.html
...
循環匯入
每個 Python 程式設計師都討厭它們,然而我們剛剛新增了一些:循環匯入(也就是當兩個模組彼此依賴時。在本例中,views.py
依賴於 __init__.py
)。請注意,這通常是一個壞主意,但在這裡實際上是沒問題的。原因是因為我們實際上並沒有在 __init__.py
中使用視圖,而只是確保模組被匯入,而且我們是在檔案的底部這樣做的。
使用藍圖¶
如果您有較大型的應用程式,建議將其劃分為較小的群組,其中每個群組都藉助藍圖來實作。有關此主題的入門介紹,請參閱文件中的《使用藍圖的模組化應用程式》章節。