flask---系统转换器,自定义转换器
系统转换器,自定义转换器
在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要过滤指定用户,所以可以使用转换器实现
转换器的本质:通过正则表达式,匹配路由地址
一.系统自带转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数。
二.自定义转换器
自定义转换器,具体实现步骤为:
导入转换器基类(BaseConverter):
Flask中所有的路由的匹配规则,都是使用转换器实现
自定义转换器:自定义类继承于转换器基类
添加转换器到默认的转换器字典中
使用自定义转换器实现自定义匹配规则
代码实现
from flask import Flask
#导入基类转换器
from werkzeug.routing import BaseConverter
app = Flask(__name__)# 1.自定义类,继承BaseConverter
class MyRegexConverter(BaseConverter):
# 2.编写初始化方法, init方法, 接收两个参数, url_map, regex, 并初始化父类空间和子类空间def__init__(self,url_map,regex):
super(MyRegexConverter, self).__init__(url_map)
self.regex = regex
# 3.将自定义转换器类,添加到默认的转换列表中
app.url_map.converters['re'] = MyRegexConverter
#使用自定义转换器#接收3位整数
@app.route('/<re("\d{3}"):num>')
def hello_world(num):
print("num = %s"%num)
return"the num is %s"%num
#接收一个手机号@app.route('/<re("1[345678]\d{9}"):mobile>')
def get_phone_number(mobile):
return "the mobile is %s" % mobile
if__name__ =='__main__':
app.run()