• 使用url_for()时,会自动调用转换器的to_url()方法


    视图反推url,在动态url(转换器)反推中的应用

    # -*- coding: utf-8 -*-
    from  flask import Flask, url_for, redirect
    from werkzeug.routing import BaseConverter
    
    app = Flask(__name__)
    
    
    # 转换器
    # 127.0.0.1:5000/goods/123
    @app.route("/goods/<int:goods_id>")
    # @app.route("/goods/<goods_id>")  # 不加转换器类型, 默认是普通字符串规则(除了/的字符)
    def goods_detail(goods_id):
        """定义的视图函数"""
        return "goods detail page %s" % goods_id
    
    
    # 1. 定义自己的转换器
    class MobileConverter(BaseConverter):
        def __init__(self, url_map):
            super(MobileConverter, self).__init__(url_map)
            self.regex = r'1[34578]d{9}'
    
    
    class RegexConverter(BaseConverter):
        """"""
    
        def __init__(self, url_map, regex):
            # 调用父类的初始化方法
            super(RegexConverter, self).__init__(url_map)
            # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配
            self.regex = 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
    
    
    # 2. 将自定义的转换器添加到flask的应用中
    app.url_map.converters["re"] = RegexConverter
    app.url_map.converters["mobile"] = MobileConverter
    
    
    # 127.0.0.1:5000/send/18612345678
    # @app.route("/send/<mobile:mobile_num>")
    @app.route("/send/<re(r'1[34578]d{9}'):mobile_num>")
    def send_sms(mobile_num):
        return "send sms 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__':
        # 通过url_map可以查看整个flask中的路由信息
        print(app.url_map)
        # 启动flask程序
        app.run(debug=True)
    

      

    访问:http://127.0.0.1:5000/index

    跳转:http://127.0.0.1:5000/send/15811111111

    修改to_url后

  • 相关阅读:
    C#的默认访问权限
    隐藏基类成员
    索引指示器的重载
    索引指示器
    vector
    string 函数
    细胞个数
    计蒜客 T1096 石头剪刀布
    计蒜客 T1125 判断字符串是否为回文
    计蒜客 T1152 成绩排序
  • 原文地址:https://www.cnblogs.com/andy9468/p/10871937.html
Copyright © 2020-2023  润新知