flask 自定义转换器

from flask import Flask
from flask import url_for
from flask import redirect
from werkzeug.routing import BaseConverter
"""
路由提取参数与自定义路由转化器进阶
"""
app = Flask(__name__, static_url_path='/static', static_folder='static', template_folder='templates')


# 万能转换器
class RegexConverter(BaseConverter):

    def __init__(self, url_map, regex):
        # 调用父类的初始化方法
        super(RegexConverter, self).__init__(url_map)
        # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配
        self.regex = regex
        # self.regex 固定的属性,专门用来存放正则表达式

    def to_python(self, value):
        """"""
        print("to_python方法被调用")
        # return "abc"
        # value是在路径进行正则表达式匹配的时候提取的参数
        return value

    def to_url(self, value):
        """使用url_for的方法的时候被调用"""
        print("to_url方法被调用")
        # return "15811111111"
        return value


# 将自定义的转换器添加到flask的应用中
app.url_map.converters["re"] = RegexConverter


# re(参数): 参数传入正则表达式,这样就可以转换任何你传入的规则
@app.route("/send_phone/<re(r'1[34578]\d{9}'):mobile_num>")
def send_phone(mobile_num):
    return "send phone to %s" % mobile_num


@app.route("/index")
def index():
    url = url_for("send_sms", mobile_num="18922222222")
    # /send/18922222222
    return redirect(url)


if __name__ == '__main__':
    app.run(debug=True)

 

posted @ 2019-01-31 16:42  20180616  阅读(277)  评论(0编辑  收藏  举报