zoukankan      html  css  js  c++  java
  • flask自定义转换器

    根据具体的需求,有些时候是需要用到正则来灵活匹配URL,但是Flask的路由匹配机制是不能直接在路由里直接写正则的,这时候就需要使用转换器!

    Flask的默认转换器:

    DEFAULT_CONVERTERS = {
        ‘default’: UnicodeConverter,
        ‘string’: UnicodeConverter,
        ‘any’: AnyConverter,
        ‘path’: PathConverter,
        ‘int’: IntegerConverter,
        ‘float’: FloatConverter,
        ‘uuid’: UUIDConverter,}

    具体用法如下:

    @app.route(‘/pp/<int:p_id>’)
    def demo(p_id):

    return ‘demo %s’ % pr_id

    但很多时候默认的装换器并不能满足具体的使用,所以很多时候需要自定义转换器:

    from werkzeug.routing import BaseConverter
    
    # 1. 定义一个自己的转换器类
    class RegexConverter(BaseConverter):
        def __init__(self, url_map, regex):
            # 调用父类的初始化方法
            super(RegexConverter, self).__init__(url_map)
            # 将正则表达式的参数保存到对象的属性中,flask会去使用这个属性来进行路由的正则匹配
            self.regex = regex
    
    
    
    # 2. 将自定义的转换器添加到flask的应用中
    app.url_map.converters["re"] = RegexConverter
    
    
    # 3. 先利用自定义的re来匹配一个手机号
    # 127.0.0.1:5000/send/18437505329
    @app.route("send/<re(r'1[34578]d{9}'):mobile>")
    def send_sms(mobile):
        return "send sms to %s" % mobile

    这样我们就可以通过正则匹配拿到相对应的手机号,但要值得注意的是,这个值是通过我们自己继承BaseConverter这个类里面的to_python这个方法返回的,如果想要进行获取到的号码进行筛选,则可以重写to_python这个方法。

    # 假设我们要将手机号的前三位返回出来:如下
    def to_python(self, value):
        value = int(str(value)[:3])
        return value
    
    结果: 在网页中就会显示 send sms to 184

    BaseConvert中还有一个重要的方法就是to_url方法,这个方法主要就是通过url_for来调用的,个人想了很久,还是不知道如何利用文字解释出来,只能截图。靠大家自己理解了。主要的作用就是改变自己给url_for传递的参数。

  • 相关阅读:
    django-templates 模板变量
    实用代码
    游戏渠道后台上线
    游戏投放中的-LTV概念与价值
    转字符串格式format技巧
    mysql -数据库设计三范式
    OAuth2.0基本原理及应用
    回调函数
    GitHub 博客园快捷发布工具
    前端react antd加载错误解决
  • 原文地址:https://www.cnblogs.com/zengsf/p/10108207.html
Copyright © 2011-2022 走看看