Flask學習總結筆記(7) -- 程序文件組織結構

前面在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循環導入模塊的問題,大家可以在使用過程中加以總結,如果有需要,可以留言大家一起討論交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章