5. 對 Flask 藍圖(Blueprint)的理解
1.什么是藍圖
藍圖/Blueprint 是一個存儲操作方法的容器,這些操作在這個Blueprint被注冊到一個應用之后就可以被調用,Flask可以通過Blueprint 來組織URL以及處理請求。
Flask使用 Blueprint 讓應用實現模塊化,在Flask中,Blueprint 具有如下屬性:
1.一個應用可以具有多個Blueprint,也就可以分割為多個模塊。
2.可以將一個Blueprint注冊到任何一個未使用的URL下,比如 “/”、“/sample”或者子域名
3.在一個應用中,一個模塊可以注冊多次
4.Blueprint可以單獨具有自己的模板、靜態文件或者其它的通用操作方法,它並不是必須要實現應用的視圖和函數的
5.在一個應用初始化時,就應該要注冊需要使用的Blueprint
但是一個Blueprint並不是一個完整的應用,它不能獨立於應用運行,而必須要注冊到某一個應用中。
2.藍圖的應用場景
1.把一個應用分解為一個藍圖的集合。這對大型應用是理想的。一個項目可以實例化一個應用對象,初始化幾個擴展,並注冊一集合的藍圖。
2. 以 URL 前綴和/或子域名,在應用上注冊一個藍圖。 URL 前綴/子域名中的參數即成為這個藍圖下的所有視圖函數的共同的視圖參數(默認情況下)。
3. 在一個應用中用不同的 URL 規則多次注冊一個藍圖。
4. 通過藍圖提供模板過濾器、靜態文件、模板和其它功能。一個藍圖不一定要實現應用或者視圖函數。
5. 初始化一個 Flask 擴展時,在這些情況中注冊一個藍圖。
3.藍圖的缺點
不能在應用創建后撤銷注冊一個藍圖而不銷毀整個應用對象。
4.如何創建藍圖
藍圖/ Blueprint 對象應用起來和一個應用/Flask對象差不多,最大的區別在於一個藍圖對象沒有辦法獨立運行,必須將它注冊到一個應用對象上才能生效。使用藍圖的步驟有三:
1.創建藍圖對象
-
from flask import Blueprint
-
-
admin = Blueprint( 'admin', __name__)
-
"""
-
參數1:藍圖的名字
-
參數2:藍圖所在的包或模塊
-
"""
2. 在這個藍圖對象上進行操作,注冊路由,指定靜態文件夾,注冊模板過濾器
簡單的說,就是把 視圖函數 注冊到 藍圖上面
-
-
def admin_home():
-
return 'admin_home'
3. 再把藍圖對象注冊到應用對象上面
app.register_blueprint(admin,url\_prefix='/admin')
當這個應用啟動后,可以通過/admin/ 訪問到藍圖中定義的視圖函數。