Flask–路由
添加路由的两种方式
第一种
@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) #
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}"