關於flask藍圖

首選:flask藍圖是什麼?

flask運行web程序的運行是經過實例化對象app.run()來運行的,那麼會出如今一個.py文件裏面定義不少的視圖函數,即不方便代碼管理,又不利於後期的維護.因此在flask出現了藍圖(Blueprint),可使程序模塊化,就像django的一個個模塊同樣來獨立編程。那麼這個藍圖(Blueprint)就實現了這個功能。
簡單來講,Blueprint 是一個存儲操做方法的容器,這些操做在這個Blueprint 被註冊到一個應用以後就能夠被調用,Flask 能夠經過Blueprint來組織URL以及處理請求。Flask使用Blueprint讓應用實現模塊化。web

在Flask中,Blueprint具備以下屬性:

一個應用能夠具備多個Blueprint
能夠將一個Blueprint註冊到任何一個未使用的URL下好比 「/」、「/sample」或者子域名
在一個應用中,一個模塊能夠註冊屢次
Blueprint能夠單獨具備本身的模板、靜態文件或者其它的通用操做方法,它並非必需要實現應用的視圖和函數的
在一個應用初始化時,就應該要註冊須要使用的Blueprint
可是一個Blueprint並非一個完整的應用,它不能獨立於應用運行,而必需要註冊到某一個應用中。django

運行機制

藍圖是保存了一組未來能夠在應用對象上執行的操做,註冊路由就是一種操做
當在應用對象上調用 route 裝飾器註冊路由時,這個操做將修改對象的url_map路由表
然而,藍圖對象根本沒有路由表,當咱們在藍圖對象上調用route裝飾器註冊路由時,它只是在內部的一個延遲操做記錄列表defered_functions中添加了一個項
當執行應用對象的 register_blueprint() 方法時,應用對象將從藍圖對象的 defered_functions 列表中取出每一項,並以自身做爲參數執行該匿名函數,即調用應用對象的 add_url_rule() 方法,這將真正的修改應用對象的路由表。編程

藍圖的url前綴

當咱們在應用對象上註冊一個藍圖時,能夠指定一個url_prefix關鍵字參數(這個參數默認是/)
在應用最終的路由表 url_map中,在藍圖上註冊的路由URL自動被加上了這個前綴,這個能夠保證在多個藍圖中使用相同的URL規則而不會最終引發衝突,只要在註冊藍圖時將不一樣的藍圖掛接到不一樣的自路徑便可。flask

註冊靜態路由

和應用對象不一樣,藍圖對象建立時不會默認註冊靜態目錄的路由。須要咱們在 建立時指定 static_folder 參數。
下面的示例將藍圖所在目錄下的static_admin目錄設置爲靜態目錄app

admin = Blueprint("admin",__name__,static_folder='static_admin')
app.register_blueprint(admin,url_prefix='/admin')

如今就可使用/admin/static_admin/ 訪問static_admin目錄下的靜態文件了 定製靜態目錄URL規則 :能夠在建立藍圖對象時使用 static_url_path 來改變靜態目錄的路由。下面的示例將爲static_admin文件夾的路由設置爲 /lib模塊化

admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib')
app.register_blueprint(admin,url_prefix='/admin')

設置模版目錄

藍圖對象默認的模板目錄爲系統的模版目錄,能夠在建立藍圖對象時使用 template_folder 關鍵字參數設置模板目錄函數

admin = Blueprint('admin',__name__,template_folder='my_templates')

注:若是在templates中存在和my_templates同名文件,則系統會優先使用templates中的文件,在使用templates目錄同名的狀況下,須要經過路徑區分,例如:url

my_templates存在兩個,若使用admin目錄下的my_templates目錄,則須要使用以下方式註冊:code

admin = Blueprint('admin',__name__,template_folder='admin/my_templates')
相關文章
相關標籤/搜索