Flask框架学习--转换器
系统转换器,自定义转换器
在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要过滤指定用户, 所以可以使用转换器实现
转换器的本质:通过正则表达式,匹配路由地址
一.系统自带转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
其中‘default’和‘string’算一类,所以转换器共6种。
系统自带的转换器具体使用方式在每种转换器的注释代码中有写,请留意每种转换器初始化的参数。
二.自定义转换器
自定义转换器,具体实现步骤为:
- 导入转换器基类(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[3-9]\d{9}"):mobile>')
def get_phone_number(mobile):
return "the mobile is %s"%mobile
if __name__ == '__main__':
app.run()