Flask系列03--Flask的路由
阿新 • • 發佈:2019-04-10
數值 student spl ict pen fault 是否 rule div
添加路由的兩種方式
第一種
@app.route("/my_de") def detail()
app.add_url_rule("/my_de",view_func=detail)
一. @app.route()中的參數
1.methods = [ ]:
當前url地址,允許訪問的請求方式 類型為可叠代對象,允許八種http請求方式
@app.route("/info", methods=["GET", "POST"]) def student_info(): stu_id = int(request.args["id"]) return f"Hello Old boy {stu_id}"
2.endpoint = “ ”
路由Mapping地址對應視圖函數,有點類似於django中的別名
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}"
3.strict_slashes=True
url地址結尾符“ / ”的控制False: 無論結尾 “ / ” 是否存在均可以訪問, True: 結尾不允許是“ / ”, 類似與django中的APPEND_SLASH
# 訪問地址 : /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"
4.defaults={}
視圖函數的參數默認值
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}"
5.redirect_to=“/index”
url地址重定向, 瀏覽器的請求返回為308
301和308都是永久重定向, 區別在於
- 301 在重定向時允許改變請求方法
- 308 在重定向時不允許改變請求方法,比如post請求被重定向時,redirect_to的url也為post請求方式,而301就有可能變成了get請求
# 訪問地址 : /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"
6.subdomain:
子域名前綴, subdoadmin=“car”, 這樣可以得到car.xxx.com 不過還需要配置app.config["SERVER_NAME"] = "xxx.com"
app.config["SERVER_NAME"] = " xxx.com" ? @app.route("/info",subdomain="car") def student_info(): return "Hello Old boy info" ? # 訪問地址為: car.xxx.com/info
二. 動態參數路由
在url後定義一個參數接收,但是這種動態參數路由在url_for時,一定要將動態參數名+參數值添加進去,否則會拋出異常
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}"
Flask系列03--Flask的路由