程序员python 高级码农成才之路

flask---系统转换器,自定义转换器

2020-11-28  本文已影响0人  幼姿沫

系统转换器,自定义转换器

在 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()

上一篇下一篇

猜你喜欢

热点阅读