houzeyu 2019-06-30
在通常我们写路由的时候都是这样子的:
@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