深入了解Python?Flask框架之藍(lán)圖
隨著Flask項(xiàng)目越來(lái)越復(fù)雜,把所有視圖函數(shù)放在一個(gè)應(yīng)用文件中會(huì)很不方便我們管理,所以需要對(duì)程序進(jìn)行模塊化的處理。Flask內(nèi)置了一個(gè)模塊化處理的類——Blueprint藍(lán)圖。
Blueprint 是一種組織一組相關(guān)視圖及其他代碼的方式。與把視圖及其他代碼直接注冊(cè)到應(yīng)用的方式不同,藍(lán)圖方式是把它們注冊(cè)到藍(lán)圖,然后在工廠函數(shù)中把藍(lán)圖注冊(cè)到應(yīng)用。
簡(jiǎn)單來(lái)說(shuō)就把a(bǔ)pp應(yīng)用分為很多個(gè)小模塊,把這些小模塊放在一個(gè)包里,這個(gè)包叫做藍(lán)圖,如下圖所示:
項(xiàng)目目錄如下圖所示:
這里創(chuàng)建了一個(gè)名為apps的包,我們這個(gè)包稱為藍(lán)圖,在這個(gè)包中,我們又創(chuàng)建了三個(gè)包,那么我們?nèi)绾伟阉{(lán)圖與app.py聯(lián)系起來(lái)呢。這時(shí)我們就要通過(guò)init.py初始化文件來(lái)把藍(lán)圖與app.py。
首先我們?cè)趗ser包中創(chuàng)建一個(gè)視圖函數(shù)文件名為view,代碼如下所示:
from flask import Blueprint user_bp= Blueprint('user',__name__)
首先導(dǎo)入Blueprint包,再通過(guò)Blueprint()方法來(lái)定義變量user_bp為藍(lán)圖對(duì)象。
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') ? #藍(lán)圖 app.register_blueprint(user_bp) return app
首先我們導(dǎo)入user中的view對(duì)象user_bp,自定義函數(shù)create_app()并創(chuàng)建一個(gè)app對(duì)象,然后通過(guò)app.register_blueprint()方法將藍(lán)圖對(duì)象綁定在app對(duì)象上。
注意:由于init.py初始化文件與static靜態(tài)文件、templates模板文件不在同一級(jí),所以需要重新指定靜態(tài)文件與模板文件的位置。
接下來(lái)編寫app.py啟動(dòng)文件,代碼如下所示:
from flask import Flask from apps.user.view import user_bp ? def create_app(): app=Flask(__name__,template_folder='../templates',static_folder='../static') ? #藍(lán)圖 app.register_blueprint(user_bp) return app
代碼很簡(jiǎn)單,直接導(dǎo)入view文件中的create_app并調(diào)用create_app()。
這樣app.py文件就和藍(lán)圖包聯(lián)系起來(lái)了。
注意:上面的文件名、藍(lán)圖名、視圖函數(shù)名都可以是任意的。
那么我們藍(lán)圖的視圖函數(shù)有什么變化呢?
以上面的view視圖函數(shù)文件為例,其代碼內(nèi)容如下所示:
from flask import Blueprint, request, render_template, redirect from apps.user.model import User user_bp= Blueprint('user',__name__) #藍(lán)圖對(duì)象 @user_bp.route('/') def hello(): return '你好'
與之前的在app.py中寫視圖函數(shù)將比,將之前的@app.route()改為藍(lán)圖對(duì)象名.route(),其他的就幾乎一樣。
總結(jié)
本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
python django集成cas驗(yàn)證系統(tǒng)
cas是什么東西就不多說(shuō)了,簡(jiǎn)而言之就是單點(diǎn)登陸系統(tǒng),一處登陸,全網(wǎng)有權(quán)限的系統(tǒng)均可以訪問(wèn)2014-07-07python統(tǒng)計(jì)函數(shù)被調(diào)用次數(shù)的實(shí)現(xiàn)
本文主要介紹了python如何統(tǒng)計(jì)函數(shù)被調(diào)用次數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python中heapq堆排算法的實(shí)現(xiàn)
這篇文章主要介紹了python中heapq堆排算法的實(shí)現(xiàn),該模塊提供了堆排序算法的實(shí)現(xiàn)。堆是二叉樹,最大堆中父節(jié)點(diǎn)大于或等于兩個(gè)子節(jié)點(diǎn),最小堆父節(jié)點(diǎn)小于或等于兩個(gè)子節(jié)點(diǎn)。下面文章更多詳細(xì)介紹,需要的小伙伴可以參考一下2022-05-05python設(shè)置windows桌面壁紙的實(shí)現(xiàn)代碼
每天換一個(gè)壁紙,每天好心情。喜歡的朋友可以參考下2013-01-01Python基礎(chǔ)數(shù)據(jù)類型tuple元組的概念與用法
元組(tuple)是 Python 中另一個(gè)重要的序列結(jié)構(gòu),和列表類似,元組也是由一系列按特定順序排序的元素組成,這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)數(shù)據(jù)類型tuple元組的概念與使用方法,需要的朋友可以參考下2021-07-07淺談Python實(shí)現(xiàn)Apriori算法介紹
這篇文章主要介紹了淺談Python實(shí)現(xiàn)Apriori算法介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12