版权声明:此博客出自HuQi,感谢您的转载 https://blog.csdn.net/JSYhq/article/details/88618271
一、添加路由方式
# 方式一
@app.route("/index", endpoint='index')
def my_flask():
time.sleep(1)
return "hello world"
# 方式二
def my_flask():
time.sleep(1)
return "hello world"
app.add_url_rule("/index", view_func=my_flask)
二、路由配置
1. 路由参数
app.add_url_rule("路由地址", view_func=视图函数, endpoint="反向地址")
2. 路由装饰器中的参数
# @app.route(),此装饰器中的参数
1. methods:当前url地址允许访问的请求方式
@app.route("/info", methods=["GET","POST"])
2. endpoint:反向url地址,默认为视图函数名(url_for)
(1)实例
from flask import url_for
@app.route("/info", methods=["GET","POST"], endpoint='r_info')
def student_info():
# 用url_for根据视图函数名找url路径,需导入
print(url_for("r_info")) # /info
stu_id = int(request.args['id'])
# Python3.6的新特性 f"{变量名}"
return f"{stu_id}"
3. defaults:视图函数的参数默认值{'nid':1}
(1) 实例
from flask import url_for
@app.route("/info",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
# Python3.6的新特性 f"{变量名}"
return f" {nid}"
4. strict_slashes:url地址结尾符"/"的控制 False : 无论结尾 "/" 是否存在均可以访问 , True : 结尾必须不能是 "/"
(1) 实例
# 访问地址 : /info
@app.route("/info", strict_slashes=True)
def student_info():
return "hello world"
# 访问地址 : /infos or /infos/
@app.route("/infos", strict_slashes=False)
def student_infos():
return "hello world"
5. redirect_to : url地址永久重定向(301)
(1) 实例
# 访问地址 : /info 浏览器跳转至 /infos
@app.route("/info", strict_slashes=True, redirect_to="/infos")
def student_info():
return "hello world"
@app.route("/infos", strict_slashes=False)
def student_infos():
return "hello world"
6. subdomain : 子域名前缀
subdomian="DragonFire" 这样写可以得到子域名.主域名前提是
app.config["SERVER_NAME"] = "as.com"
(1) 实例
app.config["SERVER_NAME"] = "as.com"
@app.route("/info",subdomain="son")
def student_info():
return "hello world"
# 访问地址为: son.as.com/info
3. 动态路由参数
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"{nid}"
备注:
<int:nid>就是在url后定义的一个参数接收,但是这种动态参数路由,在url_for的时候,
一定要将动态参数名+参数值添加进去,否则会抛出参数错误的异常