Flask藍(lán)圖Blueprint的使用

Blueprint

模塊化

隨著flask程序越來(lái)越復(fù)雜,我們需要對(duì)程序進(jìn)行模塊化的處理,之前學(xué)習(xí)過(guò)python的模塊化管理,于是針對(duì)一個(gè)簡(jiǎn)單的flask程序進(jìn)行模塊化處理

創(chuàng)新互聯(lián)建站是專(zhuān)業(yè)的泗水網(wǎng)站建設(shè)公司,泗水接單;提供網(wǎng)站建設(shè)、網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行泗水網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

舉例來(lái)說(shuō):

我們有一個(gè)博客程序,前臺(tái)界面需要的路由為:首頁(yè),列表,詳情等頁(yè)面

源程序app.py文件:
from flask import Flask

app=Flask(__name__)
@app.route('/')
def index():
    return 'index'
    
@app.route('/list')
def list():
    return 'list'
    
@app.route('/detail')
def detail():
    return 'detail'
    
if __name__=='__main__':
    app.run()

如果博主需要編輯博客,要進(jìn)入后臺(tái)進(jìn)行處理:后臺(tái)主頁(yè),編輯,創(chuàng)建,發(fā)布博客

改進(jìn)后程序:from flask import Flask

app=Flask(__name__)

@app.route('/')
def index():
    return 'index'
    
@app.route('/list')
def list():
    return 'list'
    
    
@app.route('/detail')
def detail():
    return 'detail'
    
@app.route('/')
def admin_home():
    return 'admin_home'
   
   
@app.route('/new')
def new():
    return 'new'
    
@app.route('/edit')
def edit():
    return 'edit'
  
  
 @app.route('/publish')
 def publish():
    return 'publish'
    
 if __name__=='__main__':
    app.run()

這樣就使得我們?cè)谝粋€(gè)py文件中寫(xiě)入了很多路由,將來(lái)維護(hù)代碼會(huì)非常麻煩,此時(shí),同學(xué)們就考慮到了模塊化的處理方式,將admin相關(guān)的路由寫(xiě)到一個(gè)admin.py文件中,那我們就順著這個(gè)思路走下去

修改后的代碼:
# app.pyfrom 

flask import Flask

app=Flask(__name__)

@app.route('/')
def index():
    return 'index'
    
@app.route('/list')
def list():
    return 'list'
    
    
@app.route('/detail')
def detail():
    return 'detail'
    
if __name__=='__main__':
    app.run()



#  admin.py

@app.route('/')
def admin_home():
    return 'admin_home'
@app.route('/new')
def new():
    return 'new'
    
@app.route('/edit')
def edit():
    return 'edit'
    
 @app.route('/publish')
 def publish():
    return 'publish'

發(fā)現(xiàn)app.py文件中的app直接報(bào)錯(cuò),代碼無(wú)法繼續(xù)寫(xiě)下去,所以在flask程序中,使用傳統(tǒng)的模塊化是行不通的,需要flask提供一個(gè)特有的模塊化處理方式,flask內(nèi)置了一個(gè)模塊化處理的類(lèi),即Blueprint

Blueprint概念

簡(jiǎn)單來(lái)說(shuō),Blueprint 是一個(gè)存儲(chǔ)操作方法的容器,這些操作在這個(gè)Blueprint 被注冊(cè)到一個(gè)應(yīng)用之后就可以被調(diào)用,F(xiàn)lask 可以通過(guò)Blueprint來(lái)組織URL以及處理請(qǐng)求。

Flask使用Blueprint讓?xiě)?yīng)用實(shí)現(xiàn)模塊化,在Flask中,Blueprint具有如下屬性:

  • 一個(gè)應(yīng)用可以具有多個(gè)Blueprint

  • 可以將一個(gè)Blueprint注冊(cè)到任何一個(gè)未使用的URL下比如 “/”、“/sample”或者子域名

  • 在一個(gè)應(yīng)用中,一個(gè)模塊可以注冊(cè)多次

  • Blueprint可以單獨(dú)具有自己的模板、靜態(tài)文件或者其它的通用操作方法,它并不是必須要實(shí)現(xiàn)應(yīng)用的視圖和函數(shù)的

  • 在一個(gè)應(yīng)用初始化時(shí),就應(yīng)該要注冊(cè)需要使用的Blueprint

但是一個(gè)Blueprint并不是一個(gè)完整的應(yīng)用,它不能獨(dú)立于應(yīng)用運(yùn)行,而必須要注冊(cè)到某一個(gè)應(yīng)用中。

初識(shí)藍(lán)圖

藍(lán)圖/Blueprint對(duì)象用起來(lái)和一個(gè)應(yīng)用/Flask對(duì)象差不多,最大的區(qū)別在于一個(gè) 藍(lán)圖對(duì)象沒(méi)有辦法獨(dú)立運(yùn)行,必須將它注冊(cè)到一個(gè)應(yīng)用對(duì)象上才能生效

使用藍(lán)圖可以分為三個(gè)步驟

  • 1,創(chuàng)建一個(gè)藍(lán)圖對(duì)象

admin=Blueprint('admin',__name__)
  • 2,在這個(gè)藍(lán)圖對(duì)象上進(jìn)行操作,注冊(cè)路由,指定靜態(tài)文件夾,注冊(cè)模版過(guò)濾器

@admin.route('/')
def admin_home():
    return 'admin_home'
  • 3,在應(yīng)用對(duì)象上注冊(cè)這個(gè)藍(lán)圖對(duì)象

app.register_blueprint(admin,url\_prefix='/admin')

當(dāng)這個(gè)應(yīng)用啟動(dòng)后,通過(guò)/admin/可以訪問(wèn)到藍(lán)圖中定義的視圖函數(shù)

藍(lán)圖的url前綴

  • 當(dāng)我們?cè)趹?yīng)用對(duì)象上注冊(cè)一個(gè)藍(lán)圖時(shí),可以指定一個(gè)url_prefix關(guān)鍵字參數(shù)(這個(gè)參數(shù)默認(rèn)是/)

  • 在應(yīng)用最終的路由表 url_map中,在藍(lán)圖上注冊(cè)的路由URL自動(dòng)被加上了這個(gè)前綴,這個(gè)可以保證在多個(gè)藍(lán)圖中使用相同的URL規(guī)則而不會(huì)最終引起沖突,只要在注冊(cè)藍(lán)圖時(shí)將不同的藍(lán)圖掛接到不同的自路徑即可

  • url_for

url_for('admin.index') # /admin/

網(wǎng)站標(biāo)題:Flask藍(lán)圖Blueprint的使用
文章網(wǎng)址:http://muchs.cn/article26/pgdocg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、網(wǎng)站改版、網(wǎng)站策劃、品牌網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)