@app.route("/",methods=["GET","POST"])
为什么要这么用? 其中的工作原理我们知道多少?
请关注跟 DragonFire 学 Flask 之 路由系统 , 这里有你想要的答案
1. @app.route() 装饰器中的参数
如果不明白装饰器 点击这里
methods : 当前 url 地址, 允许访问的请求方式
- @app.route("/info", methods=["GET", "POST"])
- def student_info():
- stu_id = int(request.args["id"])
- return f"Hello Old boy {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 Old boy {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 Old boy {nid}" # Python3.6 的新特性 f"{变量名}"
strict_slashes : url 地址结尾符 "/" 的控制 False : 无论结尾 "/" 是否存在均可以访问 , True : 结尾必须不能是 "/"
- # 访问地址 : /info
- @app.route("/info", strict_slashes=True)
- def student_info():
- return "Hello Old boy info"
- # 访问地址 : /infos or /infos/
- @app.route("/infos", strict_slashes=False)
- def student_infos():
- return "Hello Old boy infos"
redirect_to : url 地址重定向
- # 访问地址 : /info 浏览器跳转至 /infos
- @app.route("/info", strict_slashes=True, redirect_to="/infos")
- def student_info():
- return "Hello Old boy info"
- @app.route("/infos", strict_slashes=False)
- def student_infos():
- return "Hello Old boy infos"
subdomain : 子域名前缀 subdomian="DragonFire" 这样写可以得到 DragonFire.oldboyedu.com 前提是 app.config["SERVER_NAME"] = "oldboyedu.com"
- app.config["SERVER_NAME"] = "oldboy.com"
- @app.route("/info",subdomain="DragonFire")
- def student_info():
- return "Hello Old boy info"
- # 访问地址为: DragonFire.oldboy.com/info
关于路由目前就说这么多, 之后的课程中会有关于 Flask 路由系统的源码剖析, 再详细说明 Flask 路由系统的工作原理
2. 动态参数路由:
- 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 Old boy {nid}" # Python3.6 的新特性 f"{变量名}"
<int:nid> 就是在 url 后定义一个参数接收
但是这种动态参数路由, 在 url_for 的时候, 一定要将动态参数名 + 参数值添加进去, 否则会抛出参数错误的异常
来源: http://www.bubuko.com/infodetail-2735513.html