Flask 中的路由系统

≡放荡痞女 提交于 2019-12-05 00:27:00

一、methods允许请求的方法

  methods : 当前 url 地址,允许访问的请求方式,默认不写为GET方法

1 @app.route("/info", methods=["GET", "POST"])
2 def student_info():
3     stu_id = int(request.args["id"])
4     return f"Hello Old boy {stu_id}"  # Python3.6的新特性 f"{变量名}"

二、endpoint url的反向解析

  endpoint : 反向url地址,默认为视图函数名 (url_for)

1 from flask import url_for
2 
3 @app.route("/info", methods=["GET", "POST"], endpoint="r_info")
4 def student_info():
5     print(url_for("r_info"))  # /info
6     stu_id = int(request.args["id"])
7     return f"Hello Old boy {stu_id}"  # Python3.6的新特性 f"{变量名}

三、defaults默认参数

  defaults : 视图函数的参数默认值{"nid":1}

1 from flask import url_for
2 
3 @app.route("/info", methods=["GET", "POST"], endpoint="r_info", defaults={"nid": 100})
4 def student_info(nid):  #这里形参必须有个nid接收
5     print(url_for("r_info"))  # /info
6     # stu_id = int(request.args["id"])
7     print(nid)  # 100
8     return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{变量名}"

四、strict_slashes url结尾界定符匹配

  strict_slashes : url地址结尾符"/"的控制 False : 无论结尾 "/" 是否存在均可以访问 , True : 结尾必须不能是 "/"

 1 # 访问地址 : /info 
 2 @app.route("/info", strict_slashes=True)
 3 def student_info():
 4     return "Hello Old boy info"
 5 
 6 
 7 # 访问地址 : /infos  or  /infos/
 8 @app.route("/infos", strict_slashes=False)
 9 def student_infos():
10     return "Hello Old boy infos"

五、redirect_to url地址重定向

  redirect_to : url地址重定向,且为308永久重定向

1 # 访问地址 : /info 浏览器跳转至 /infos
2 @app.route("/info", strict_slashes=True, redirect_to="/infos")
3 def student_info():
4     return "Hello Old boy info"
5 
6 @app.route("/infos", strict_slashes=False)
7 def student_infos():
8     return "Hello Old boy infos"

六、subdomain 子域名

  subdomain : 子域名前缀 subdomian="cnblogs" 这样写可以得到 cnblogs.aspx.com 前提是app.config["SERVER_NAME"] = "aspx.com"

1 app.config["SERVER_NAME"] = "aspx.com"
2 
3 @app.route("/info",subdomain="cnblogs")
4 def student_info():
5     return "Hello cnblogs info"
6 
7 # 访问地址为:  cnblogs.aspx.com/info

七、动态参数路由

  <int:nid> 就是在url后定义一个参数接收

  但是这种动态参数路由,在url_for的时候,一定要将动态参数名+参数值添加进去,否则会抛出参数错误的异常

1 from flask import url_for
2 
3 # 访问地址 : http://127.0.0.1:5000/info/1
4 @app.route("/info/<int:nid>", methods=["GET", "POST"], endpoint="r_info")
5 def student_info(nid):
6     print(url_for("r_info",nid=2))  # /info/2
7     return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{变量名}"

  多个参数传递:

1 from flask import url_for
2 
3 # 访问地址 : http://127.0.0.1:5000/info/1
4 @app.route("/info/<nid1>/<nid2>", methods=["GET", "POST"], endpoint="r_info")
5 def student_info(nid):
6     print(url_for("r_info",nid=2,nid=3))  # /info/2/3
7     return f"Hello Old boy {nid}"  # Python3.6的新特性 f"{变量名}"
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!