IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Flask入门学习(三):自定义转化器converter

    52txr发表于 2024-07-20 16:11:00
    love 0

    在Flask中,内置转换器允许通过<>语法从URL中提取参数。标准格式为<converter:variable_name>。内置转换器包括string(接受不带斜杠的文本)、int(接受正整数)、float(接受正浮点值)、path(与string类似但接受斜杠)和uuid(接受UUID字符串)。自定义转换器可以通过继承BaseConverter类并添加到应用的转换器字典中实现,如示例中通过正则表达式定义电话号码匹配规则。

    内置转换器回顾

    在Flask中,前文说了内置转换器:使用<>提取参数。例如在<int: id>中,int就是一个转换器。

    标准语法格式就是: <converter:variable_name>

    path与string的最大区别就是带不带斜杠的问题。

    转换器内容
    string(默认)接受任何不带斜杠的文本
    int接受正整数
    float接受正浮点值
    path与 string 类似,但还接受斜杠
    uuid接受 UUID 字符串

    自定义转换器

    Flask框架中的转换器的自定义,具体流程如下:

    1. 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录;

      from werkzeug.routing import BaseConverter

    2. 自定义转换器:自定义类继承于转换器基类;

      class RegexConverter(BaseConverter)

    3. 添加转换器到默认的转换器字典中;

      app.url_map.converters['re'] = RegexConverter

    4. 使用自定义转换器实现自定义匹配规则

      @app.route('/<re(r"1\d{10}"):id>')

    例如使用正则表达式1\d{10},表示1开头,后面跟十位数,其实就是一个11位的电话号码。

    from flask import Flask
    from werkzeug.routing import BaseConverter
    
    app = Flask(__name__)
    
    # 转换器基类
    class RegexConverter(BaseConverter):
        def __init__(self, url_map, regex):
            super(RegexConverter, self).__init__(url_map)
            self.regex = regex
    
        def to_python(self, value):
            return value
    
    # 将自定义的转换器添加到flask应用中
    app.url_map.converters['re'] = RegexConverter
    
    @app.route('/<re(r"1\d{10}"):id>')
    def hello(id):
        return id
    
    if __name__ == "__main__":
        app.run()
    

    http://127.0.0.1:5000/11234567890

    运行结果



沪ICP备19023445号-2号
友情链接