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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Flask框架(flask中的蓝图Blueprint)

發(fā)布時間:2024/9/30 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask框架(flask中的蓝图Blueprint) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 我們學習Flask框架,開始的時候是把所有的視圖函數(shù)等都寫在一個文件中

? ?我們在這單個文件中可以定義路由、視圖函數(shù)、定義模型等等。

? ?但這顯然存在一個問題:隨著業(yè)務代碼的增加,將所有代碼都放在單個程序文件中,是非常不合適的。

? ? ?這不僅會讓代碼閱讀變得困難,而且會給后期維護帶來麻煩。

2. 問題怎么解決呢

? ? ? ?一個程序執(zhí)行文件中,功能代碼過多。? 讓代碼實現(xiàn)模塊化

? ? ? ?嘗試用模塊的導入的方式解決

? ? ? ?把一個文件拆開,把視圖函數(shù)按照不同的功能進行劃分,分成不同的文件,然后建立一個主文件,在主文件中。利用模塊導入的方法,

??這是我的文件目錄?

? 可以在其他文件里面把視圖函數(shù)放出去,然后利用裝飾器傳入?yún)?shù)的方式進行在主文件中把其他視圖的路由進行綁定

from flask import Flask from Blueprint_le.goods import get_goods from Blueprint_le.users import register # 循環(huán)引用,解決的方法,推遲一方的導入,讓一方先完成 # 使用裝飾器的函數(shù)使用方法,解決模塊分割的問題 app = Flask(__name__) app.route("/get_goods")(get_goods) app.route("/register")(register)@app.route("/") def index():return "index page"if __name__ == '__main__':print(app.url_map)app.run()

3.?什么是藍圖?

? ?藍圖:用于實現(xiàn)單個應用的視圖、模板、靜態(tài)文件的集合。

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

? 簡單來說,藍圖就是一個存儲操作路由映射方法的容器,主要用來實現(xiàn)客戶端請求和URL相互關聯(lián)的功能。

? 在Flask中,使用藍圖可以幫助我們實現(xiàn)模塊化應用的功能。

4.藍圖的運行機制:

? ?藍圖是保存了一組將來可以在應用對象上執(zhí)行的操作。

? ?注冊路由就是一種操作,當在程序實例上調用route裝飾器注冊路由時,這個操作將修改對象的url_map路由映射列表。

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

5.藍圖的使用

? ?(1)創(chuàng)建藍圖對象

'''Blueprint必須指定兩個參數(shù),admin表示藍圖的名稱,__name__表示藍圖所在模塊''' admin = Blueprint('admin',__name__)

? ?(2)? 注冊藍圖的路由

@admin.route('/') def admin_index():return 'admin_index'

? (3) 在程序中注冊該藍圖

app.register_blueprint(admin,url_prefix='/admin')

6.藍圖的使用例子

? ? ?以目錄的形式定義藍圖以及藍圖里面模板目錄的處理

1. 首先我的目錄結構和我的程序和模板存放的目錄為:

? ?

? 2. 使用目錄分割,在cart目錄里面的_ _ init _ _.py里面創(chuàng)建藍圖,并且要把視圖加載進來

from flask import Blueprint'''創(chuàng)建藍圖 修改模板路徑為當前templates的路徑,還有一個設置靜態(tài)的目錄static_folder''' app_cart = Blueprint("app_cart", __name__, template_folder="templates")'''在__init__.py執(zhí)行的時候,把視圖加載進來,讓藍圖與應用程序知道有視圖的存在''' # Blueprint_le.cart.views : 從路徑里面的views.py導入get_cart視圖函數(shù) from Blueprint_le.cart.views import get_cart

3. 在views.py里面使用藍圖,定義視圖函數(shù),

? ?定義模板 cart.html存放在cart里面的templates下

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Title</title> </head> <body><h1>cart page</h1> </body> </html>

? ? views.py?

from flask import render_template from Blueprint_le.cart import app_cart@app_cart.route("/get_cart") def get_cart():return render_template("cart.html")

4.不使用目錄的分割形式也可以,例如建立order.py,建立藍圖

from flask import Blueprint'''創(chuàng)建一個藍圖的對象,藍圖就是一個小模塊的抽象的模塊'''app_orders = Blueprint("app_orders", __name__)@app_orders.route("/get_orders") def get_orders():return "get orders page"

5.然后建立一個main.py在里面實現(xiàn)主要的代碼:

from flask import Flask from Blueprint_le.orders import app_orders from Blueprint_le.cart import app_cartapp = Flask(__name__)'''注冊藍圖 , url_prefix:給訪問的路徑加一個前綴''' app.register_blueprint(app_orders, url_prefix="/orders") app.register_blueprint(app_cart, url_prefix="/cart")@app.route("/") def index():return "index page"if __name__ == '__main__':# 打印出所有的路由print(app.url_map)app.run(debug=True)

6.? 首先可以訪問 沒有使用目錄分割的orders,? ? 運行程序,瀏覽器訪問? ?127.0.0.1:5000/orders/get_orders

? ??

?然后可以訪問使用目錄分割的cart,瀏覽器訪問?127.0.0.1:5000/cart/get_cart

??

7.? 如果藍圖里面的小目錄里面沒有找到模板,則會去頂級的templates的目錄里面去找

? ? 如果在藍圖的小目錄的templates的模板和總的templates的模板重名的話,則會使用總的templates里的模板

??

?

總結

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

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