1. 程式人生 > >11、Flask實戰第11天:視圖使用裝飾器

11、Flask實戰第11天:視圖使用裝飾器

... 訪問 表示 lena 實戰 之前 定義 app style

藍圖的基本使用

之前我們寫的代碼都是集中在一個主程序文件裏面。這樣不利於分層解耦和維護。
藍圖的作用就是讓我們的flask項目更加模塊化結構更加清晰,可以將相同模塊的視圖函數放在同一個藍圖下,同一個文件中,方便管理
比如,設計的網站有如下幾個模塊
  讀書 ---book
  電影 ---movie
  新聞 ---news
  用戶 ---user

我們新建了一個Python Package命名為blueprints,然後在裏面新建book.py, movie.py, news.py, user.py

技術分享圖片

這裏以user.py為例演示,其他模塊同理

from flask import
Blueprint #我們發現這裏和主程序那裏差不多,只是這裏多了一個參數來表示該藍圖的名字 user_bp = Blueprint(user, __name__) @user_bp.route(/profile/) def profile(): return 個人中心 @user_bp.route(/settings/) def settings(): return 用戶設置

user.py的藍圖配置好了,我們需要到主程序my_flask.py那裏註冊才可以

...
from blueprints.user import
user_bp ... app.register_blueprint(user_bp)

技術分享圖片

技術分享圖片

我們註意到訪問的url是: http://127.0.0.1:5000/profile/ 和http://127.0.0.1:5000/settings/

如果我們想在url加上前綴,變成http://127.0.0.1:5000/user/profile這種,我們只需要在配置藍圖的時候加上url_prefix參數

user_bp = Blueprint(user, __name__, url_prefix=/user)

技術分享圖片

技術分享圖片

模板文件尋找規則

在實際開發中我們使用藍圖也是渲染模板

@user_bp.route(
/profile/) def profile(): return render_template(profile.html) #這個profile.html的位置也會從templates目錄裏面去找

我們也可以把模板放到其他位置,比如,我在blueprint下創建個目錄user,然後把模板profile.html當到user目錄下,那麽就需要使用template_folder參數

#這裏指定了這個藍圖模板的查找路徑,是相對於本藍圖的所在的路徑,也可以使用絕對路徑
user_bp = Blueprint(user, __name__, url_prefix=/user, template_folder=user) 

@user_bp.route(/profile/)
def profile():
    return render_template(profile.html)

一旦我們添加了template_folder參數,查找模板文件還是會先去templates查找,如果templates裏面沒有,才會去我們自己定義的目錄去找

靜態文件尋找規則

我們之前知道加載靜態文件是用: url_for(‘static‘, filename=‘xxxxx‘), 這種情況下,flask會直接從項目下面的static目錄去查找。在藍圖中也是這樣。
那麽我們也可以在藍圖中把靜態目錄位置改到其他地方,如:添加個static_folder參數

user_bp = Blueprint(user, __name__, url_prefix=/user, static_folder=xxxxx)

然後我們在模板中加載的時候需要指定藍圖的名字

url_for(user.static, filename=....)

其實在實際開發過程中我們沒必要改變模板和靜態文件的位置,使用默認指定的就可以了,這裏只是作為知識點講解

在沒有使用藍圖的時候,我們使用url_for反轉的時候,直接指定endpoint就可以了,但是有了藍圖之後,我們還必須加上藍圖的名字,比如:

url_for(user.profile)

11、Flask實戰第11天:視圖使用裝飾器