标签:converter __init__ div ini __name__ integer 关心 使用 继承
DEFAULT_CONVERTERS = {
‘default‘: UnicodeConverter,
‘string‘: UnicodeConverter,
‘any‘: AnyConverter,
‘path‘: PathConverter,
‘int‘: IntegerConverter,
‘float‘: FloatConverter,
‘uuid‘: UUIDConverter,
}
class BaseConverter(object):
"""Base class for all converters."""
regex = ‘[^/]+‘
weight = 100
def __init__(self, map):
self.map = map
def to_python(self, value):
return value
def to_url(self, value):
return url_quote(value, charset=self.map.charset)
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()
from flask import Flask
from flask import redirect
from flask import url_for
from werkzeug.routing import BaseConverter
app = Flask(__name__)
class MyConverter(BaseConverter):
def __init__(self,url_map,regex):
super(MyConverter, self).__init__(url_map)
self.regex = regex
def to_python(self, value): # 匹配成功后被调用,可以对匹配到的参数进行处理,比如转换匹配到的数据的类型,在正则匹配完成之后,调用视图函数之前,可以对数据进行最后的处理
return value
def to_url(self, value): # 在正则匹配之前调用执行,并传入参数,调用完成之后才开始真正的路由匹配,不关心是否匹配成功,可以通过此函数修正要传入路由中的参数,方便更好的正则匹配
return value
app.url_map.converters[‘re‘] = MyConverter
@app.route(‘/<re("\d{3}"):num>‘)
def index(num):
return num
@app.errorhandler(404)
def my_error(e):
return redirect(url_for(‘jia‘))
@app.route(‘/jia‘)
def jia():
return ‘jai‘
if __name__ == ‘__main__‘:
app.run(debug=True)
标签:converter __init__ div ini __name__ integer 关心 使用 继承
原文地址:https://www.cnblogs.com/serpent/p/9575179.html