自定义路由转换器
自定义转换器
from flask import Flask,url_for from flask import redirect from werkzeug.routing import BaseConverter #导入转换积累44 app = Flask(__name__) #自定义转换基类 最简单的 在项目中自定义正则转换器会被写到utils工具文件夹的common.py通用工具模块中。 # class ConverterOne(BaseConverter): # def __init__(self,url_map,regex): #url_map固定参数 # super(ConverterOne, self).__init__(url_map) # self.regex = regex #替代掉self.regex="[a-z]{3}" #将自定义好的自定义转换器,添加到转换器字典中 # app.url_map.converters["re"] = ConverterOne #re是具体使用的转换器的名字 class ConverterTwo(BaseConverter): #根据情况重写to_python和to_url方法 def __init__(self, url_map, regex): # url_map固定参数 super(ConverterTwo, self).__init__(url_map) def to_python(self, value): ''' 此方法是匹配成功之后,调用视图函数之前,将匹配的结果value接收,传给对应的函数,作进一步的处理 :param value: :return: ''' print("value_python",value) print(111) return "ing" def to_url(self, value): """ 此方法是flask重定向的时候使用的,开始匹配之后,匹配成功之前进行调用, 对value进行处理,为了保证顺利进入to_python.无论最终的重定向成功与否,都会被调用 :param value: :return: """ print("---->",value) print(222) return "to_url" #将自定义好的自定义转换器,添加到转换器字典中 app.url_map.converters["re"] = ConverterTwo #re是具体使用的转换器的名字 #使用 @app.route("/index/<re(r'[a-z]{3}'):fla>",) def index(fla): print(fla) return "suc" @app.route("/x") def redir(): print("===") return redirect(url_for("index",fla="jiu")) #fla是传递的参数 if __name__ == '__main__': app.run(debug=True) #访问http://127.0.0.1:5000/index/yui 返回的是 suc 测试第一个转换器 #访问http://127.0.0.1:5000/index/yuig 返回的是notfound 测试第一个转换器 #http://127.0.0.1:5000/index/x 为了搞清楚to_python to_url 第二个转换器 ''' 终端打印结果 === ----> jiu 222 value_python to_url 111 ing''' ''' 结论 to_url只会在重定向且与url_for联合使用才可以,先执行to_url,在执行to_python'''
自带的转换器
DEFAULT_CONVERTERS = {
'default': UnicodeConverter,
'string': UnicodeConverter,
'any': AnyConverter,
'path': PathConverter,
'int': IntegerConverter,
'float': FloatConverter,
'uuid': UUIDConverter,
}
参考链接https://blog.csdn.net/Enjolras_fuu/article/details/59057826

浙公网安备 33010602011771号