Flask中的路由系统

Posted rixian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask中的路由系统相关的知识,希望对你有一定的参考价值。

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中的路由系统的主要内容,如果未能解决你的问题,请参考以下文章

Flask第六篇 Flask中路由系统

第六篇 Flask中的路由系统

Flask初识,第七篇,Flask中的路由

Flask最强攻略 - 跟DragonFire学Flask - 第七篇 Flask 中路由系统

7,Flask 中路由系统

Flask系列 路由系统