日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Web框架——Flask系列之蓝图Blueprint(二十一)

發布時間:2024/7/5 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Web框架——Flask系列之蓝图Blueprint(二十一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、為什么學習藍圖?

我們學習Flask框架,是從寫單個文件,執行hello world開始的。我們在這單個文件中可以定義路由、視圖函數、定義模型等等。但這顯然存在一個問題:隨著業務代碼的增加,將所有代碼都放在單個程序文件中,是非常不合適的。這不僅會讓代碼閱讀變得困難,而且會給后期維護帶來麻煩。

如下示例:我們在一個文件中寫入多個路由,這會使代碼維護變得困難。

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'

問題:一個程序執行文件中,功能代碼過多。就是讓代碼模塊化。根據具體不同功能模塊的實現,劃分成不同的分類,降低各功能模塊之間的耦合度。python中的模塊制作和導入就是基于實現功能模塊的封裝的需求。

嘗試用模塊導入的方式解決: 我們把上述一個py文件的多個路由視圖函數給拆成兩個文件:app.pyadmin.py文件。app.py文件作為程序啟動文件,因為admin文件沒有應用程序實例app,在admin文件中要使用app.route路由裝飾器,需要把app.py文件的app導入到admin.py文件中。

# 文件app.py from flask import Flask # 導入admin中的內容 from admin import * 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 from app import app @app.route('/') def admin_home():return 'admin_home'@app.route('/new') def new():return 'new'@app.route('/edit') def edit():return 'edit'

啟動app.py文件后,我們發現admin.py文件中的路由都無法訪問。 也就是說,python中的模塊化雖然能把代碼給拆分開,但不能解決路由映射的問題。

二、什么是藍圖?

藍圖:用于實現單個應用的視圖、模板、靜態文件的集合。

藍圖就是模塊化處理的類。

簡單來說,藍圖就是一個存儲操作路由映射方法的容器,主要用來實現客戶端請求和URL相互關聯的功能。 在Flask中,使用藍圖可以幫助我們實現模塊化應用的功能。

三、藍圖的運行機制:

藍圖是保存了一組將來可以在應用對象上執行的操作。注冊路由就是一種操作,當在程序實例上調用route裝飾器注冊路由時,這個操作將修改對象的url_map路由映射列表。當我們在藍圖對象上調用route裝飾器注冊路由時,它只是在內部的一個延遲操作記錄列表defered_functions中添加了一個項。當執行應用對象的 register_blueprint() 方法時,應用對象從藍圖對象的 defered_functions 列表中取出每一項,即調用應用對象的 add_url_rule() 方法,這將會修改程序實例的路由映射列表。


四、藍圖的使用:

  • 創建藍圖對象。
  • #Blueprint必須指定兩個參數,admin表示藍圖的名稱,__name__表示藍圖所在模塊 admin = Blueprint('admin',__name__)
  • 注冊藍圖路由。
  • @admin.route('/') def admin_index():return 'admin_index'
  • 在程序實例中注冊該藍圖。
  • app.register_blueprint(admin,url_prefix='/admin')

    文件目錄:

    程序執行文件/test4/test.py

    from flask import Flask #導入藍圖對象 from login import logins from user import usersapp = Flask(__name__)@app.route('/') def hello_world():return 'Hello World!' #注冊藍圖,第一個參數logins是藍圖對象,url_prefix參數默認值是根路由,如果指定,會在藍圖注冊的路由url中添加前綴。 app.register_blueprint(logins,url_prefix='') app.register_blueprint(users,url_prefix='')if __name__ == '__main__':app.run(debug=True)

    創建藍圖:/test4/user.py

    from flask import Blueprint,render_template #創建藍圖,第一個參數指定了藍圖的名字。 users = Blueprint('user',__name__)@users.route('/user') def user():return render_template('user.html')

    創建藍圖:/test4/login.py

    from flask import Blueprint,render_template #創建藍圖 logins = Blueprint('login',__name__)@logins.route('/login') def login():return render_template('login.html')

    運行/test4/test.py文件

    五、動態路由示例(作者–圖書):

    文件目錄:Flask_test4/delete.py

    from flask import Blueprint,redirect,url_for app_au = Blueprint('app_au',__name__) app_bk = Blueprint('app_bk',__name__)from test4 import *@app_au.route('/delete_au<id>') def delete_au(id):del_au = Author.query.filter_by(id=id).first()db.session.delete(del_au)db.session.commit()return redirect(url_for('index'))@app_bk.route('/delete_bk<id>') def delete_bk(id):del_bk = Book.query.filter_by(id=id).first()db.session.delete(del_bk)db.session.commit()return redirect(url_for('index'))

    文件目錄:Flask_test4/test4.py

    #coding=utf-8 #目的:創建兩個模型類型,實現數據庫的連接和數據的操作 from flask import Flask,render_template,request,redirect,url_for from flask_sqlalchemy import SQLAlchemy from flask_wtf import FlaskForm from wtforms import StringField,SubmitField from wtforms.validators import DataRequired #導入delete文件中的藍圖對象 from delete import app_au,app_bkapp = Flask(__name__) #對數據庫連接的基本設置 app.config['SQLALCHEMY_DATABASE_URI']='mysql://root:mysql@localhost/test0' app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True #把應用程序的實例和SQLAlchemy進行關聯 db = SQLAlchemy(app) app.config['SECRET_KEY'] = 'a'#自定義表單,實現數據的輸入保存操作 class Append(FlaskForm):author = StringField(validators=[DataRequired()])book = StringField(validators=[DataRequired()])submit = SubmitField(u'提交')#自定義模型類 class Author(db.Model):__tablename__ = 'authors'id = db.Column(db.Integer,primary_key=True)name = db.Column(db.String(32),unique=True)def __repr__(self):return 'author:%s'%self.nameclass Book(db.Model):__tablename__ = 'books'id = db.Column(db.Integer,primary_key=True)info = db.Column(db.String(32),unique=True)def __repr__(self):return 'book:%s'%self.info@app.route('/',methods=['GET','POST']) def index():au = Author.query.all()bk = Book.query.all()form = Append()if form.validate_on_submit():#從表單中獲取數據wtf_au = form.author.datawtf_bk = form.book.data#把數據存入模型類中db_au = Author(name=wtf_au)db_bk = Book(info=wtf_bk)#添加到數據庫操作db.session.add_all([db_au,db_bk])db.session.commit()au = Author.query.all()bk = Book.query.all()return render_template('index.html',au=au,bk=bk,form=form)if request.method == 'GET':return render_template('index.html',au=au,bk=bk,form=form)#注冊藍圖 app.register_blueprint(app_au) app.register_blueprint(app_bk)if __name__ == '__main__': print app.url_mapapp.run(debug=True)

    查看藍圖路由:藍圖路由可以分為兩塊,".“前面的是藍圖名稱,”."后面的是視圖函數名。

    總結

    以上是生活随笔為你收集整理的Web框架——Flask系列之蓝图Blueprint(二十一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日日做夜夜爽毛片麻豆 | 91综合久久 | 97人妻精品一区二区三区软件 | 午夜激情成人 | 国产精品一二三四 | 国产精品乱码久久久久久久久 | 美女扒开腿让男生桶 | 亚洲永久免费视频 | 亚洲成人av电影 | 婷婷久久精品 | 日韩中文字幕一区二区 | 黑人又大又粗又长 | 亚洲三级影视 | 天天操天天插天天射 | 无码人妻精品一区二区三区不卡 | 91成人免费电影 | 欧美20p| 三上悠亚一区二区 | 人与动物2免费观看完整版电影高清 | 天天黄色片 | 韩国三级在线播放 | 性欧美高清 | 综合99| 精品一区二区三区在线观看 | 娇妻高潮浓精白浆xxⅹ | 91精品久久久久久久久久入口 | 亚洲xx站| 深夜成人在线观看 | 午夜丁香网| 欧美精品一二三区 | 每日更新av| 国产精品久久亚洲 | 亚洲一区二区三区三州 | 国产又黄又嫩又滑又白 | 国产福利视频一区二区 | 亚洲综合五区 | 男人的网站在线观看 | 日韩欧美一本 | 欧美v亚洲 | 欧洲在线一区 | av无码一区二区三区 | 婷婷国产一区二区三区 | 97超视频在线观看 | 免费在线黄色av | 午夜性色福利视频 | 青青草原影视 | 亚洲男女av | 美女av影院| 欧美中日韩在线 | 91亚洲网 | 操天天操 | 欧美熟妇乱码在线一区 | 毛片无限看 | 欧美亚洲黄色片 | 天天艹av | 国产亚洲精品成人无码精品网站 | 黄色片a| 聚色av | 欧美激情午夜 | 奇米四色777| 美女日批在线观看 | 国产剧情一区二区三区 | 自拍偷拍中文字幕 | 日韩第1页 | 青青草国产精品 | 亚洲日本色图 | 蜜桃成熟时李丽珍在线观看 | 一区二区成人在线观看 | 韩国黄色网址 | 人人干人人干人人干 | 亚洲天堂免费在线 | 亚洲大片免费观看 | 日韩精品网| 美女黄色免费网站 | 丁香色欲久久久久久综合网 | 欧美成人精精品一区二区频 | 香港a毛片 | 国产15页| 国产高潮国产高潮久久久91 | 国产色在线视频 | brazzers精品成人一区 | 亚洲av少妇一区二区在线观看 | 免费看黄色一级视频 | 久久久久综合网 | 日韩免费av一区 | 日韩欧美一二三四区 | 麻豆精品国产传媒av绿帽社 | 69亚洲精品| 三级黄毛片| 亚洲国产精品成人综合色在线婷婷 | 精品人妻互换一区二区三区 | 波多野结衣av无码 | 亚洲色图制服诱惑 | 久久久久亚洲AV成人网人人小说 | 懂色中文一区二区在线播放 | 日韩欧美无 | 激情综合网婷婷 | 九九成人 | 日韩三级国产精品 |