使用Flask快速開發WEB應用-第二篇:Blueprint模組的應用
轉自:http://www.easywu.com/?p=306
看了之後可以對Blueprint的用法和程式的框架有所瞭解。
一個網站根據不同的功能可能會分為多個不同的模組,如果把所有功能都寫在一個檔案裡,後期將會很難維護。上一篇裡面講到了怎樣構建一個最小的Flask應用,這一篇的內容重寫了WEB應用的框架,使用Blueprint來註冊不同功能的模組。
這一篇裡我將會把網站功能分為兩個部份,frontend為一些常用資訊功能,admin為管理員功能。兩個功能分別寫入不同的PY檔案裡通過Blueprint註冊成為網站功能繫結URL地址。先看一下檔案結構:
我用火影的名字作為檔名,哈哈 : )這完全是個人愛好。最愛的OnePiece早就被我用於公司的專案,只能拿火影來用。sasuke作為專案名,是佐助的名字@
現在來分析一下檔案結構:
naruto資料夾包含:
資料夾:sasuke Python包(WEB應用的所有內容)。
檔案:run.py管理整個WEB應用的執行。
首先來看看run.py的程式碼:
|
這一段程式碼在上一篇中已經介紹過,不同的地方是把Flask初始化放在create_app函式裡面。
sasuke是一個標準的Python包(任何一個包含有__init__.py檔案的資料夾都會被認定為Python包,並且會從__init__.py中執行程式碼進行初始化。
|
可以看出__init__.py只做一件事,從views包裡面的admin檔案中匯入admin,從frontend檔案中匯入frontend。這樣外層程式就可以通過views.frontend來訪問frontend.py裡面的frontend, 通過views.admin來訪問admin.py裡面的admin。
看看admin.py中的程式碼:
|
frontend.py中的程式碼:
|
可以看出admin.py與frontend.py中的程式碼很相似,其中有一段程式碼我們看到了Blueprint:
admin = Blueprint(‘admin’, __name__)
用於定義Blueprint模組,Blueprint模組可以用來定義路由,通過@admin.route(‘/’)來定義路由(URL地址),或許你還不明白這裡定義了一個Blueprint物件admin除了新增路由外還有何用處,不急,下面我們來看看sasuke包中的__init__.py裡的程式碼:
|
重點看這裡:
for module, url_prefix in modules: app.register_blueprint(module, url_prefix = url_prefix)
通過傳遞兩個引數至register_blueprint方法註冊Blueprint。根據傳遞過來的引數module是admin與frontend,而admin與frontend是已經定義好的Blueprint物件。url_prefix為繫結的url路徑,看到這裡是不是赫然開朗起來了?
舉個例子,如果你需要另外加一個模組用於管理商店,那麼可以通過以下幾個步驟新增:
1、在views包裡面新建一個shop.py,定義一個Blueprint的物件shop
2、匯入到__init__.py裡面。
3、在sasuke包的__init__.py中匯入shop
4、DEFAULT_MODULES中新增(shop, ‘/shop’)