Flask中的路由系統
阿新 • • 發佈:2019-01-16
瀏覽器 edi 3.6 dbo 系統 開始 clas 應用 get
Flask中的路由系統其實我們並不陌生了,從一開始到現在都一直在應用
@app.route("/",methods=["GET","POST"])
至於為什麽這麽使用,馬上開始介紹
[email protected]() 裝飾器中的參數
(1).methods: 當前url地址,允許訪問的請求方式,默認支持"GET", 如果想加入新的請求方式,就必須加上"GET"
USER = {"username": "zm", "password": "123"} @app.route("/", methods=["GET", "POST"]) def login(): if request.method == "POST": if request.form["username"] == USER["username"] and request.form["password"] == USER["password"]: session["user"] = USER["username"] return redirect("/index") return render_template("login.html", msg="用戶名或密碼錯誤") return render_template("login.html", msg=None)
(2).endpoint: 反向取到當前的url地址,默認為視圖函數名 (r_login)
@app.route("/", methods=["GET", "POST"], endpoint="r_login") def login(): print(url_for("r_login")) if request.method == "POST": if request.form["username"] == USER["username"] and request.form["password"] == USER["password"]: session["user"] = USER["username"] return redirect("/index") return render_template("login.html", msg="用戶名或密碼錯誤") return render_template("login.html", msg=None)
(3).defaults: 視圖函數的參數默認值{"nid": 1}
@app.route("/", methods=["GET", "POST"], defaults={"id": 1}) def login(id): print(id) if request.method == "POST": if request.form["username"] == USER["username"] and request.form["password"] == USER["password"]: session["user"] = USER["username"] return redirect("/index") return render_template("login.html", msg="用戶名或密碼錯誤") return render_template("login.html", msg=None)
(4).strict_slashes : url地址結尾符"/"的控制 False : 無論結尾 "/" 是否存在均可以訪問 , True : 結尾必須不能是 "/"
# strict_slashes=False 訪問地址: /index or /index/ @app.route("/index", strict_slashes=False) def index(): if not session.get("user"): return redirect("/") return f"Hello {USER[‘username‘]} 小哥" # Python3.6的新特性f“{變量名}” # strict_slashes=True 訪問地址: index/ @app.route("/index", strict_slashes=True) def index(): if not session.get("user"): return redirect("/") return f"Hello {USER[‘username‘]} 小哥" # Python3.6的新特性f“{變量名}”
(5).redirect_to: url地址重定向
# 訪問地址: /index 瀏覽器跳轉至 /indexs @app.route("/index", strict_slashes=False, redirect_to="/indexs") def index(): if not session.get("user"): return redirect("/") return f"Hello {USER[‘username‘]} 小哥" # Python3.6的新特性f“{變量名}” @app.route("/indexs") def indexs(): return "大家好,我是渣渣輝"
(6).subdomain: 子域名前綴subdomian="zm" 這樣寫可以得到zm.niub.com前提是
app.config["SERVER_NAME"]="niub.com"
app.config["SERVER_NAME"] = "oldboy.com" @app.route("/info",subdomain="DragonFire") def student_info(): return "Hello Old boy info" # 訪問地址為: DragonFire.oldboy.com/info # 必須得有一個線上服務器
2.動態參數路由
@app.route("/indexs/<int:id>") def indexs(id): print(id) return "大家好,我是渣渣輝"
<int:nid> 就是在url後定義一個參數接收,但是這種動態參數路由,在url_for的時候,一定要將動態參數名+參數值添加進去,否則會拋出參數錯誤的異常
3.路由正則
一般不用,如果有特殊需求,不怕麻煩的話,這個東西還是挺好用的,前提是你的正則玩兒的很牛
Flask中的路由系統