藍圖這個名字好像就是根據單詞Blueprint字面意思來,跟平常我們理解的藍圖完全掛不上鉤,這裡藍圖就是指Blueprint。 使用藍圖的好處是可以將不同功能作用的視圖函數/類視圖放到不同的模塊中,可以更加方便的開發和維護 ...
藍圖這個名字好像就是根據單詞Blueprint字面意思來,跟平常我們理解的藍圖完全掛不上鉤,這裡藍圖就是指Blueprint。
使用藍圖的好處是可以將不同功能作用的視圖函數/類視圖放到不同的模塊中,可以更加方便的開發和維護
- 導入Blueprint:from flask import Blueprint
- 創建一個藍圖:例如user_bp = Blueprint(‘user’, __name__, prefix=’/user’),第一參數指定藍圖名稱,第二個參數與flask中的使用是相同的(用於指定靜態文件的相對路徑,也方便其他三方插件報錯時定位問題),第三個參數prefix為這個藍圖指定url首碼,這個首碼會和視圖函數/類視圖指定的url直接連接起來形成一個有效的url
- 視圖函數:也是和Flask的使用一樣,使用對應的route裝飾器即可
- 註冊藍圖:使用方法app.register_blueprint(user_bp)即可
- HTML模板查找規則:如果創建藍圖時,第二個參數使用的是__name__,那麼預設的模板文件路徑就是項目根目錄下的templates文件夾(Flask實例化時的__name__),如果不想使用這個templates文件夾,可以在實例化Blueprint時指定template_folder參數,那麼此時模板文件的查找順序就是先在templates文件夾中查找,查找不到時,就會在藍圖文件同級目下template_folder參數指定的文件夾(Blueprint實例化時的__name__)中查找
- 靜態文件查找規則:如果創建藍圖時,如果第二個參數使用的是__name__,那麼,在使用url_for(‘static’, filename=xxx)時,就只會在項目根目錄的static文件夾中查找,如果使用url_for(‘user.static’, filename=xxx)就會在藍圖創建時static_folder參數指定的文件夾中查找
- url_for反轉:反轉獲取藍圖中的url時,必須加上藍圖名稱的首碼,即便是就在該藍圖模塊中使用url_for,也要加上藍圖的名稱,例如url_for(‘blue_name.viewfunc_name’)
- 子功能變數名稱:在創建藍圖的時候可以使用subdomain參數指定子功能變數名稱,需要註意的是具體的IP地址和localhost是不能有子功能變數名稱的