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.路由正则
一般不用,如果有特殊需求,不怕麻烦的话,这个东西还是挺好用的,前提是你的正则玩儿的很牛
原文地址:https://www.cnblogs.com/rixian/p/10279295.html
时间: 2024-10-09 06:16:19