添加路由的两种方式
第一种
@app.route("/my_de") def detail()
app.add_url_rule("/my_de",view_func=detail)
一. @app.route()中的参数
1.methods = [ ]:
当前url地址,允许访问的请求方式 类型为可迭代对象,允许八种http请求方式
@app.route("/info", methods=["GET", "POST"]) def student_info(): stu_id = int(request.args["id"]) return f"Hello Old boy {stu_id}"
2.endpoint = “ ”
路由Mapping地址对应视图函数,有点类似于django中的别名
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}"
3.strict_slashes=True
url地址结尾符“ / ”的控制False: 无论结尾 “ / ” 是否存在均可以访问, True: 结尾不允许是“ / ”, 类似与django中的APPEND_SLASH
# 访问地址 : /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"
4.defaults={}
视图函数的参数默认值
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}"
5.redirect_to=“/index”
url地址重定向, 浏览器的请求返回为308
301和308都是永久重定向, 区别在于
- 301 在重定向时允许改变请求方法
- 308 在重定向时不允许改变请求方法,比如post请求被重定向时,redirect_to的url也为post请求方式,而301就有可能变成了get请求
# 访问地址 : /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"
6.subdomain:
子域名前缀, subdoadmin=“car”, 这样可以得到car.xxx.com 不过还需要配置app.config["SERVER_NAME"] = "xxx.com"
app.config["SERVER_NAME"] = " xxx.com" @app.route("/info",subdomain="car") def student_info(): return "Hello Old boy info" # 访问地址为: car.xxx.com/info
二. 动态参数路由
在url后定义一个参数接收,但是这种动态参数路由在url_for时,一定要将动态参数名+参数值添加进去,否则会抛出异常
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}"