深入瞭解Python Flask框架之藍圖

隨著Flask項目越來越復雜,把所有視圖函數放在一個應用文件中會很不方便我們管理,所以需要對程序進行模塊化的處理。Flask內置瞭一個模塊化處理的類——Blueprint藍圖。

Blueprint 是一種組織一組相關視圖及其他代碼的方式。與把視圖及其他代碼直接註冊到應用的方式不同,藍圖方式是把它們註冊到藍圖,然後在工廠函數中把藍圖註冊到應用。

簡單來說就把app應用分為很多個小模塊,把這些小模塊放在一個包裡,這個包叫做藍圖,如下圖所示:

項目目錄如下圖所示:

這裡創建瞭一個名為apps的包,我們這個包稱為藍圖,在這個包中,我們又創建瞭三個包,那麼我們如何把藍圖與app.py聯系起來呢。這時我們就要通過init.py初始化文件來把藍圖與app.py。

首先我們在user包中創建一個視圖函數文件名為view,代碼如下所示:

from flask import Blueprint
user_bp= Blueprint('user',__name__)

首先導入Blueprint包,再通過Blueprint()方法來定義變量user_bp為藍圖對象。

init.py初始化文件代碼如下所示:

from flask import Flask
from apps.user.view import user_bp
​
def create_app(): 
    app=Flask(__name__,template_folder='../templates',static_folder='../static')
​
    #藍圖
    app.register_blueprint(user_bp) 
    return app

首先我們導入user中的view對象user_bp,自定義函數create_app()並創建一個app對象,然後通過app.register_blueprint()方法將藍圖對象綁定在app對象上。

註意:由於init.py初始化文件與static靜態文件、templates模板文件不在同一級,所以需要重新指定靜態文件與模板文件的位置。

接下來編寫app.py啟動文件,代碼如下所示:

from flask import Flask
from apps.user.view import user_bp
​
def create_app(): 
    app=Flask(__name__,template_folder='../templates',static_folder='../static')
​
    #藍圖
    app.register_blueprint(user_bp) 
    return app

代碼很簡單,直接導入view文件中的create_app並調用create_app()。

這樣app.py文件就和藍圖包聯系起來瞭。

註意:上面的文件名、藍圖名、視圖函數名都可以是任意的。

那麼我們藍圖的視圖函數有什麼變化呢?

以上面的view視圖函數文件為例,其代碼內容如下所示:

from flask import Blueprint, request, render_template, redirect
from apps.user.model import User
 
user_bp= Blueprint('user',__name__)        #藍圖對象
 
@user_bp.route('/')
def hello():
    return '你好'

與之前的在app.py中寫視圖函數將比,將之前的@app.route()改為藍圖對象名.route(),其他的就幾乎一樣。

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: