1. 程式人生 > >Flask系列03--Flask的路由

Flask系列03--Flask的路由

數值 student spl ict pen fault 是否 rule div

Flask–路由

添加路由的兩種方式

第一種

@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的路由