app.route('url')中支持string,int,float,path等类型,隐形支持正则。
实现flask支持正则的步骤
1 定义正则类,继承BaseConverter
from werkzeug.routing import BaseConverter
class ReConverter(BaseConverter):
def __init__(self,url_map,*args):
super().__init__(url_map)
self.regex = args[0]
2 把正则类赋值给我们定义的正则规则
app.url_map.converters["re"] = ReConverter
3 在路由中使用正则
@app.route("/<re('\d{4}'):id>")
def index(id):
return "hello id=%s" %id
补充:
在定义转换器类时,我们通常还遇到两种方法:to_python,to_url
举例代码如下:
from flask import Flask, url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class ReConverter(BaseConverter):
def __init__(self,url_map,*args):
print("调用__init__")
super().__init__(url_map)
self.regex = args[0]
def to_python(self, value):
# 正则提取到的数字一般并不是就直接交给视图函数处理,而是交给to_python,进过to_python处理
print(u"调用to_python value=%s"%value)
return "4564"
def to_url(self, value):
# 反向解析先调用该函数
print(u"调用to_url value=%s"%value)
return value
app.url_map.converters["re"] = ReConverter
@app.route("/<re('\d{4}'):id>")
def index(id):
return "hello id=%s" %id
@app.route("/")
def url():
return '<a href="%s">链接</a>' % url_for('index',id="1234")
if __name__ == '__main__':
app.run(port=5003)
当我们调用to_python时,函数执行的是首先装饰器正则匹配提取出id ,然后id当成value传给to_python ,经to_python处理交给视图函数
当我们通过反向解析传递函数时,首先url_for 传递给函数to_url,to_url函数对传入value值进行处理交给装饰器,然后重复to_python步骤。
标签:__,flask,value,python,url,def,id,路由 From: https://blog.51cto.com/u_15828115/5754440