码迷,mamicode.com
首页 > 其他好文 > 详细

Flask中的路由系统

时间:2019-01-16 21:51:32      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:dex   接收   method   print   浏览器   应用   允许   str   python3   

Flask中的路由系统其实我们并不陌生了,从一开始到现在都一直在应用

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

至于为什么这么使用,马上开始介绍

1.@app.route() 装饰器中的参数

(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中的路由系统

标签:dex   接收   method   print   浏览器   应用   允许   str   python3   

原文地址:https://www.cnblogs.com/rixian/p/10279295.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!