2-flask之路由和藍圖
阿新 • • 發佈:2021-06-10
------------恢復內容開始------------
一:路由
1:查詢路由資訊
1.1 命令列方式
flask routes
1.2 在程式中獲取
在應用中的url_map屬性中儲存著整個Flask應用的路由對映資訊,可以通過讀取這個屬性獲取路由資訊
print(app.url_map)
如果想在程式中遍歷路由資訊,可以採用如下方式
for rule in app.url_map.iter_rules(): print('name={} path={}'.format(rule.endpoint, rule.rule))
2:指定請求方式
在 Flask 中,定義路由其預設的請求方式為:
- GET
- OPTIONS(自帶)
- HEAD(自帶)
利用methods
引數可以自己指定一個介面的請求方式
@app.route("/itcast1", methods=["POST"]) def view_func_1(): return "hello world 1" @app.route("/itcast2", methods=["GET", "POST"]) def view_func_2(): return "hello world 2"
二:藍圖
1:簡介
別多想,藍圖就像桑榆django中的一個app,可以劃分出多個也業務單元進行獨立開發
藍圖實際可以理解為是一個儲存一組檢視方法的容器物件,其具有如下特點:
- 一個應用(app——flask的例項化物件)可以具有多個Blueprint
- 可以將一個Blueprint註冊到任何一個未使用的URL下比如 “/user”、“/goods”
- Blueprint可以單獨具有自己的模板、靜態檔案或者其它的通用操作方法,它並不是必須要實現應用的檢視和函式的
- 在一個應用初始化時,就應該要註冊需要使用的Blueprint
但是一個Blueprint並不是一個完整的應用,它不能獨立於應用執行,而必須要註冊到某一個應用中。
2:使用方式:三步走
第一步:建立藍圖物件
user_bp=Blueprint('user',__name__)
第二步:在這個藍圖上進行操作,繫結路由,指定靜態檔案等
@user_bp.route('/') def user_profile(): return 'user_profile'
第三步:在app上註冊藍圖
app.register_blueprint(user_bp)
3:單檔案藍圖
可以將藍圖於檢視放到一個檔案中
from flask import Flask,Blueprint #flask 類接受一個__nmae__ 引數 app = Flask(__name__) #例項化藍圖 user_blue = Blueprint("user_",__name__) #對映函式 @user_blue.route("/blue") def blue(): return "hello blue" #裝飾器的作用事將路由對映到函式中 @app.route('/') def index(): return "hello word" # app.register_blueprint(user_blue) app.register_blueprint(user_blue)
4:目錄(包)藍圖
對於一個打算包含多個檔案的藍圖,通常將建立藍圖物件放到Python包的__init__.py
檔案中
--------- project # 工程目錄 |------ main.py # 啟動檔案 |------ user #使用者藍圖 | |--- __init__.py # 此處建立藍圖物件 | |--- passport.py | |--- profile.py | |--- ... | |------ goods # 商品藍圖 | |--- __init__.py | |--- ... |...
擴充套件用法
1 指定藍圖的url字首
在應用中註冊藍圖時使用url_prefix
引數指定
app.register_blueprint(user_bp, url_prefix='/user') app.register_blueprint(goods_bp, url_prefix='/goods')
2 藍圖內部靜態檔案
和應用物件不同,藍圖物件建立時不會預設註冊靜態目錄的路由。需要我們在 建立時指定 static_folder 引數。
下面的示例將藍圖所在目錄下的static_admin目錄設定為靜態目錄
admin = Blueprint("admin",__name__,static_folder='static_admin') app.register_blueprint(admin,url_prefix='/admin')
現在就可以使用/admin/static_admin/<filename>
訪問static_admin
目錄下的靜態檔案了。
也可通過static_url_path
改變訪問路徑
admin = Blueprint("admin",__name__,static_folder='static_admin',static_url_path='/lib') app.register_blueprint(admin,url_prefix='/admin')
3 藍圖內部模板目錄
藍圖物件預設的模板目錄為系統的模版目錄,可以在建立藍圖物件時使用 template_folder 關鍵字引數設定模板目錄
admin = Blueprint('admin',__name__,template_folder='my_templates')
------------恢復內容結束------------