1. 程式人生 > >第六篇 Flask中的路由系統

第六篇 Flask中的路由系統

Flask中的路由系統其實我們並不陌生了,從一開始到現在都一直在應用

@app.route("/",methods=["GET","POST"])

為什麼要這麼用?其中的工作原理我們知道多少?

一、@app.route() 裝飾器中的引數

methods :當前 url 地址,允許訪問的請求方式

@app.route("/info", methods=["GET", "POST"])
def student_info():
    stu_id = int(request.args["id"])
    return f"Hello girl {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  girl {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 girl {nid}"  # Python3.6的新特性 f"{變數名}"

strict_slashes :url地址結尾符"/"的控制 ,False : 無論結尾 "/" 是否存在均可以訪問,True:必須嚴格遵循route的路由規則。

# 訪問地址 : /info 
@app.route("/info", strict_slashes=True)
def student_info():
    return "Hello girl info"


# 訪問地址 : /infos  or  /infos/
@app.route("/infos", strict_slashes=False)
def student_infos():
    return "Hello girl infos"

redirect_to : url地址重定向,在進入檢視函式之前重定向(301)

# 訪問地址 : /info 瀏覽器跳轉至 /infos
@app.route("/info", strict_slashes=True, redirect_to="/infos")
def student_info():
    return "Hello girl info"

@app.route("/infos", strict_slashes=False)
def student_infos():
    return "Hello girl infos"

subdomain :子域名字首 subdomian="fengchong" 這樣寫可以得到 fengchong.kaifa.com 前提是app.config["SERVER_NAME"] = "kaifa.com"

app.config["SERVER_NAME"] = "kaifa.com"

@app.route("/info",subdomain="fengchong")
def student_info():
    return "Hello girl info"

# 訪問地址為: fengchong.kaifa.com/info

動態路由引數<int:nid>or<string:nid>:

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 girl {nid}"  # Python3.6的新特性 f"{變數名}"

<int:nid> 就是在url後定義一個引數接收,如果不指定引數型別預設為所有接受的引數都會被轉為字串型別。

但是這種動態引數路由,在url_for的時候,一定要將動態引數名+引數值新增進去,否則會丟擲引數錯誤的異常