Flask 學習1 專案搭建 目錄結構
一、程式的目錄結構
|ProjectName |-app/ 程式包 | |-__init__.py | |-models.py // 資料庫模型 | |-emails.py // 郵件處理程式 | |-main/ // 程式模組,根據業務區分,不同的模組可以各自擁有自己的單獨目錄 | | |-__init__.py | | |-views.py | | |-errors.py | | |-forms.py | |-templates/ // Jinja2的html模板 | |-static/ // css、js、圖片等靜態檔案 |-migrations/ // 資料庫遷移資料夾 |-venv/ // 虛擬環境 |-tests/ // 單元測試程式,可以包含多個檔案 | |-__init__.py | |-test*.py // 單元測試檔案 |-manage.py // 啟動程式 |-config.py // 全域性配置檔案 |readme.txt
二、程式中各檔案說明
這是初學備忘:以下各程式檔案只有最基本的內容,主要是為了讓程式能執行起來,通過這些目錄結構以及各檔案之間的引用,弄明白各檔案的作用,以及他們之間的關係。後續在不斷完善功能的過程中,各檔案的內容會不斷的增加。
首先我們新建一個名為app(也可以是別的名字)的python package,然後再在app資料夾中新建一個名為main的python package
在Pycharm中新建的Python Package資料夾下預設有一個__init__.py的檔案,到時我們例項化整個Flask應用,藍圖各個模組的藍圖物件就是在這些檔案。
2.1建立藍圖物件
什麼是藍圖(blueprint)
http://www.zhihu.com/question/31748237/answer/55313054
知乎的答案已經很詳細啦,其實簡而言之呢就是在同一個app內實現程式碼的模組化,不同的功能可以封裝成不同的Package,管理起來方便的多(有點類似django的app)。
我們先在 app/main/__init__.py
檔案中建立一個藍圖物件:
from flask import Blueprint
main = Blueprint('main',__name__)
from . import views
通過例項化一個Blueprint 類物件可以建立藍本。這個建構函式有兩個必須指定的引數:
藍本的名字和藍本所在的包或模組。和程式一樣,大多數情況下第二個引數使用Python 的__name__ 變數即可。
2.2 路由檔案 views.py
程式的路由儲存在包裡的app/main/views.py 模組中,而錯誤處理程式儲存在app/main/ errors.py模組中。匯入這兩個模組就能把路由和錯誤處理程式與藍本關聯起來。
注意,這些模組在app/main/__init__.py指令碼的末尾匯入,這是為了避免迴圈匯入依賴,因為在views.py
和errors.py
中還要匯入藍本main。
app/main/views.py:藍本中定義的程式路由
from . import main
@main.route('/') //注意這裡是 main.route 而不再是 app.route
@main.route('/index')
def index():
return "Hello, World!"
2.3 app/__init__.py:程式包的構造檔案,使用工廠函式,註冊藍本
from flask import Flask
from config import Config
def create_app():
app = Flask(__name__)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint) //註冊藍本
return app
2.4啟動指令碼 manage.py
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
通過構建第一章節的目錄結構,以及第二章節中提到的4個程式檔案,即可執行起來一個最基本的flask專案,目錄結構中提到的 config.py
、models.py
、errors.py
、emails.py
等檔案在這個例子中並沒有使用到,在後續完善功能的過程中會陸續增加其內容。