Python進階(四十九)-初識Flask Blueprint

      網友投稿 773 2022-05-30

      前言

      在進行Python Web開發時選擇Flask框架。項目模塊劃分階段,使用Blueprint(這里暫且稱之為“藍本”)。Blueprint通過把實現不同功能的module分開,從而把一個大的application分割成各自實現不同功能的module。在一個Blueprint中可以調用另一個blueprint的view function, 但要加相應的blueprint名。

      Blueprint還有其他好處,其本質上來說就是讓程序更加松耦合,更加靈活,增加復用性,提高查錯效率,降低出錯概率。

      在具體項目開發過程中,不同藍本分別對應不同的功能模塊。例如auth授權模塊和項目主模塊。

      ##實例講解

      下面以實際項目開發為例,項目結構圖如下圖所示:

      不同藍本分別位于不同的Python包中,而藍圖的創建則位于Python包下的__init__.py文件。不同Python包下的views.py文件則對應不同藍本下的路由。

      在示例項目中,auth授權包下的藍本創建代碼如下:

      from flask import Blueprint auth = Blueprint('auth', __name__) from . import forms, views

      1

      2

      3

      4

      5

      上面的藍本創建語句創建了名為“auth”的藍本。之所以將from . import forms, views導包語句置于__init__.py末尾,是為了避免循環導入依賴,因為在views.py中還要導入藍本auth。

      Views.py文件內容如下:

      from flask import request, flash, render_template, redirect, url_for from . import auth from web_flask.app.dal_pymysql import DataManager # 管理員登錄 @auth.route('/login', methods=['POST']) def login(): form = request.form # 由于request中的form參數以字典的形式存在,故以下語句等價 uname = request.form['username'] pwd = request.form['password']

      1

      2

      3

      4

      5

      6

      Python進階(四十九)-初識Flask Blueprint

      7

      8

      9

      10

      11

      在這里使用from . import auth方式導入所需藍本。藍本的注冊語句則置于項目創建的工廠方法中,注冊代碼如下:

      from .auth import auth as auth_blueprint from .main import main as main_blueprint # 注冊藍本 url_prefix='/admin' app.register_blueprint(auth_blueprint,) app.register_blueprint(main_blueprint, static_folder='static') return app

      1

      2

      3

      4

      5

      6

      在藍本注冊函數register_blueprint()中,第一個參數為所注冊的藍本名稱。當我們在應用對象上注冊一個藍圖時,需要指定一個url_prefix關鍵字 參數(這個參數默認是/)。其余可增參數詳見Flask官方文檔。

      注意事項

      注意:在藍本中編寫視圖函數views.py主要有兩點不同:

      第一,和前面的路由程序一樣,路由修飾器由藍本提供;

      第二,url_for() 函數的用法不同。

      你可能還記得,url_for() 函數的第一個參數是路由的端點名,在程序的路由中,默認為視圖函數的名字。例如,在單腳本程序中,index() 視圖函數的URL 可使用url_for(‘index’) 獲取。

      在藍本中就不一樣了,Flask 會為藍本中的全部端點加上一個命名空間,這樣就可以在不同的藍本中使用相同的端點名定義視圖函數,而不會產生沖突。命名空間就是藍本的名字(Blueprint 構造函數的第一個參數),所以視圖函數index() 注冊的端點名是main.index,其URL 使用url_for(‘main.index’) 獲取。

      url_for()函數還支持一種簡寫的端點形式,在藍本中可以省略藍本名,例如url_for(’.index’)。在這種寫法中,命名空間是當前請求所在的藍本。這意味著同一藍本中的重定向可以使用簡寫形式,但跨藍本的重定向必須使用帶有命名空間的端點名。

      如果不使用url_for(‘main.index’) 或url_for(’.index’) 的形式,在項目運行過程中就會提示請求的URL錯誤。

      附 電子書福利(免積分下載)

      《Flask Web開發:基于Python的Web應用開發實戰》

      《Learning Python, 5th Edition》

      Flask Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:python列表高級操作——快來看看你會多少!
      下一篇:【精選單品】人工智能助力出海企業打出金牌口碑!
      相關文章
      日韩精品一区二区亚洲AV观看| 国产精品亚洲一区二区无码| 国产亚洲精品福利在线无卡一 | 亚洲AV无码一区二区一二区| 亚洲综合小说另类图片动图| 亚洲第一综合天堂另类专| 亚洲国产成人综合| 国产亚洲综合久久系列| 亚洲日本在线观看视频| 亚洲一线产品二线产品| 亚洲 自拍 另类小说综合图区 | 亚洲第一页综合图片自拍| 国产亚洲精品美女| 亚洲成人一区二区| 亚洲日韩在线第一页| 国产亚洲成人久久| 亚洲精品国产精品乱码不99| 国产亚洲欧洲精品| 亚洲AV成人一区二区三区AV| 亚洲成A人片在线观看无码3D| 亚洲av手机在线观看| 亚洲欧洲中文日韩久久AV乱码 | 亚洲一区二区三区影院 | 亚洲首页国产精品丝袜| 亚洲欧美日韩一区二区三区在线| 亚洲综合综合在线| 亚洲免费视频观看| 亚洲一本到无码av中文字幕 | 亚洲a∨国产av综合av下载| 亚洲va中文字幕| 亚洲va中文字幕无码| 亚洲精品无码激情AV| 久久久久亚洲AV无码专区桃色| 国精无码欧精品亚洲一区| 99久久亚洲综合精品成人网| 亚洲天堂一区二区三区四区| 亚洲粉嫩美白在线| 色偷偷亚洲男人天堂| 亚洲男人第一无码aⅴ网站| 亚洲精品卡2卡3卡4卡5卡区| 亚洲人成网址在线观看|