Flask最強攻略 -- 第七篇 Flask 中路由系統
Flask中的路由系統其實我們並不陌生了,從一開始到現在都一直在應用
@app.route("/",methods=["GET","POST"])
為什么要這么用?其中的工作原理我們知道多少?
請關注跟DragonFire學Flask 之 路由系統 ,這里有你想要的答案
1. @app.route() 裝飾器中的參數
如果不明白裝飾器 點擊這里
methods : 當前 url 地址,允許訪問的請求方式
@app.route("/info", methods=["GET", "POST"])
def student_info():
stu_id = int(request.args["id"])
return f"Hello Old boy {stu_id}" # Python3.6的新特性 f"{變量名}"
endpoint : 反向url地址,默認為視圖函數名 (url_for)
from flask import url_for
@app.route("/info", methods=["GET", "POST"], endpoint="r_info")
def student_info():
print(url_for("r_info")) # /info
stu_id = int(request.args["id"])
return f"Hello Old boy {stu_id}" # Python3.6的新特性 f"{變量名}"
defaults : 視圖函數的參數默認值{"nid":1}
from flask import url_for
@app.route("/info", methods=["GET", "POST"], endpoint="r_info", defaults={"nid": 100})
def student_info(nid):
print(url_for("r_info")) # /info
# stu_id = int(request.args["id"])
print(nid) # 100
return f"Hello Old boy {nid}" # Python3.6的新特性 f"{變量名}"
strict_slashes : url地址結尾符"/"的控制 False : 無論結尾 "/" 是否存在均可以訪問 , True : 結尾必須不能是 "/"
# 訪問地址 : /info
@app.route("/info", strict_slashes=True)
def student_info():
return "Hello Old boy info"
# 訪問地址 : /infos or /infos/
@app.route("/infos", strict_slashes=False)
def student_infos():
return "Hello Old boy infos"
redirect_to : url地址重定向
# 訪問地址 : /info 瀏覽器跳轉至 /infos
@app.route("/info", strict_slashes=True, redirect_to="/infos")
def student_info():
return "Hello Old boy info"
@app.route("/infos", strict_slashes=False)
def student_infos():
return "Hello Old boy infos"
subdomain : 子域名前綴 subdomian="DragonFire" 這樣寫可以得到 DragonFire.oldboyedu.com 前提是app.config["SERVER_NAME"] = "oldboyedu.com"
app.config["SERVER_NAME"] = "oldboy.com"
@app.route("/info",subdomain="DragonFire")
def student_info():
return "Hello Old boy info"
# 訪問地址為: DragonFire.oldboy.com/info
關於路由目前就說這么多,之后的課程中會有關於Flask路由系統的源碼剖析,再詳細說明Flask路由系統的工作原理
2.動態參數路由:
from flask import url_for
# 訪問地址 : http://127.0.0.1:5000/info/1
@app.route("/info/<int:nid>", methods=["GET", "POST"], endpoint="r_info")
def student_info(nid):
print(url_for("r_info",nid=2)) # /info/2
return f"Hello Old boy {nid}" # Python3.6的新特性 f"{變量名}"
<int:nid> 就是在url后定義一個參數接收
但是這種動態參數路由,在url_for的時候,一定要將動態參數名+參數值添加進去,否則會拋出參數錯誤的異常
3.路由正則:
一般不用,如果有特殊需求,不怕麻煩的話,這個東西還是挺好用的,前提是你的正則玩兒的很6

