zoukankan      html  css  js  c++  java
  • 使用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后

  • 相关阅读:
    在请求中使用XML Publisher生成文件报错
    Oracle Sourcing Implementation and Administration Guide(转)
    API To Import Negotiations(转)
    使用POI动态更新导出的EXCEL模板中的列
    使用POI设置导出的EXCEL锁定指定的单元格
    QML获取随机颜色
    Access导出excel
    Component
    QML中打印
    Qt Quick Dialogs
  • 原文地址:https://www.cnblogs.com/andy9468/p/10871937.html
Copyright © 2011-2022 走看看