Flask动态路由

在通常我们写路由的时候都是这样子的:
@app.route(“/”)
def hello():
return “Hello World”
但是我们会有这样的需求,判断字符串的类型或长度来决定使用哪个视图函数或者返回404,那我们就可以这样做:
@app.route(“/int:requirt>”)
def fn_int(requirt):
return “<h1>”+str(requirt)+”</h1>”

#http://127.0.0.1:5000/123 返回”<h1>123</h1>”
#http://127.0.0.1:5000/12 发生404错误

@app.route(“/<float:requirt>”)
def fn_float(requirt):
return “<h1>”+str(requirt)+”</h1>”

#http://127.0.0.1:5000/1.2 返回”<h1>1.2</h1>”
#http://127.0.0.1:5000/12 发生404错误

@app.route_path(“/<requirt>”)
def fn(requirt):
return “<h1>”+requirt+”</h1>”

#http://127.0.0.1:5000/1.2 返回”<h1>1.2</h1>”
#http://127.0.0.1:5000/12 返回<h1>12</h1>
#http://127.0.0.1:5000/hello 返回<h1>hello</h1>

上面写了常用的三种动态路由限制类型,当然我们还可以自定义类型,继承BaseConverter,然后就可以写我们的规则了
from werkzeug.routing import BaseConverter

class MyConverter(BaseConverter):
def __init__(self,map,regex):
super().__init__(map)
self.regex=regex

app.url_map.converters[‘rule’]=MyConverter

@app.route_path(“/<rule(“\w{3}”):requirt>”)
def fn_rule(requirt):
return “<h1>”+requirt+”</h1>”

#http://127.0.0.1:5000/hello 发生404
#http://127.0.0.1:5000/123 返回”<h1>123</h1>”
#http://127.0.0.1:5000/12.3 发生404

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理