前面在Flask學習中我們採用了一種簡單的文件夾組織形式。但是對於大型程序而言,將所有的代碼放在一起不是一種明智的選擇。Flask提供了一種藍本(Blueprint)的程序組織方式,可以對大型程序進行模塊化的分割,使得代碼擴展性和可讀性大爲提高。
0x01 文件結構
上面定義了2個藍本模塊,分別是main和info。下面以main爲例子進行說明。
0x02創建藍本
文件app/main/__init__.py
添加定義:
from flask import Blueprint
main=Blueprint('admin',__name__)
from . import views,errors
通過實例化Blueprint類的對象可以創建一個藍本。程序的路由信息保存在app/main/views.py
中,錯誤處理信息保存在app/main/errors.py
中。
(1)app/main/views.py
from . import main
from flask import render_template
@main.route('/test/')
def test():
return render_template('main/test.html'),200
(2)app/main/errors.py
from flask import render_template
from app.main import main
@main.app_errorhandler(404)
def page_not_found(e):
return render_template('main/404.html'),404
@main.app_errorhandler(500)
def internal_server_error(e):
return render_template('main/500.html'),500
上面使用的是app_errorhandler,與前面使用的errorhandler修飾器稍有不同。
0x03註冊藍本
在app/__init__.py
中添加註冊藍本的代碼:
#導入藍本
from app.main import main
app.register_blueprint(main,url_prefix='/admin')
0x04構造url
在藍本模式下,url_for函數的用法稍有不同。url_for定位參數需要帶上藍本名稱:
url_for('main.test')
0x05後記
其他部分的文件含義就不贅述了,與以前講解的Flask內容類似。使用Blueprint藍本模式,是Flask構建大型程序的基礎,有必要熟練掌握其中的用法。需要強調一點的是,使用藍本模式容易造成import循環導入模塊的問題,大家可以在使用過程中加以總結,如果有需要,可以留言大家一起討論交流。