自定义路由转换器

自定义转换器

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

posted @ 2019-01-14 14:05  团子emma  阅读(213)  评论(0)    收藏  举报