装换器:
有时须要给 URL 添加一定规则,进行限制路由的形式。
规则可以用 <converter:variable_name> 指定一个可选的转换器 ,参数1:转换器类型, 参数2 :传过来的变量
1 Flask自带的转换器
DEFAULT_CONVERTERS = {
- ‘default’: UnicodeConverter,(字符串与2同)
- ‘string’: UnicodeConverter,
- ‘any’: AnyConverter, 匹配any中存在的地址
- ‘path’: PathConverter, 匹配路径
- ‘int’: IntegerConverter,
- ‘float’:FloatConverter,
- ‘uuid’: UUIDConverter 匹配 UUID(x-x-x-xxx-xxxx)之类的字符串
}
2 自定义转换器的步奏:
1.自定义一个继承BaseConverter的Converter类
2. 重写⽗父类的属性,定义转换器器规则
regex = (新的正则规则)
3.将⾃自定义转换器器的类添加到默认的转换器器列列表中,
自定义转换器其他两个函数实现
继承于自定义转换器之后,还可以实现 to_python 和 to_url 这两个函数去对匹配参数做进一步处理:
- 1 to_python:
- 该函数参数中的 value 值代表匹配到的值,可输出进行查看
- 匹配完成之后,对匹配到的参数作最后一步处理再返回,比如:转成 int 类型的值再返回:
class RegexConverter(BaseConverter):
def __init__(self, url_map, *args):
super(RegexConverter, self).__init__(url_map)
# 将接受的第1个参数当作匹配规则进行保存
self.regex = args[0]
def to_python(self, value):
return int(value)
- 2 to_url:
- 在使用 url_for 去获取视图函数所对应的 url 的时候,会调用此方法对 url_for 后面传入的视图函数参数做进一步处理
- 具体可参见 Flask 的 app.py 中写的示例代码:ListConverter