Flask基础(07)-->正则自定义转换器

正则自定义转换器

为什么要自定义正则转换器?

因为默认转换器太过于笨重,往往不能满足我们实际业务的需求,这时候我们就需要自定义正则转换器了。

那么我们怎么自定义正则转换器呢?

from flask import Flask
from werkzeug.routing import BaseConverter

app = Flask(__name__)


class Config(object):
    DEBUG = True


app.config.from_object(Config)


class RegexConverter(BaseConverter):
    """自动以的正则转换器"""
    def __init__(self, url_map, *args):
        super(RegexConverter, self).__init__(url_map)
        self.regex = args[0]


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

"""
1.re()相当于RegexCoverter(),那么re("[0-9]{6}")相当于给RegexCoverter的__init__传递了参数“[0-9]{6}”
2.url_map是什么我们暂时不管,直接传递给BaseConverter的__init__
3.那么args[0]接收的就是我们定义的正则表达式
4.self.regex其实就是对BaseConverter中regex的重写
5.BaseConverter的这个原生regex:regex = '[^/]+'
"""
@app.route('/user/<re("[0-9]{6}"):user_id>')
def demo1(user_id):
    return "用户的id是:%s"%user_id


@app.route('/')
def hello_world():
    return 'Hello World!!!'


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

转换器to_python

# 转换器to_python
from flask import Flask
from werkzeug.routing import BaseConverter
from flask import  redirect

# 创建Flask的应用程序
app = Flask(__name__)

class ListConverter(BaseConverter):
    regex = "(\\d+,?)+\\d$"
    def to_python(self,value):
        return  value.split(",")

app.url_map.converters['list'] = ListConverter

@app.route('/test1/<list:user_ids>')
def demo1(user_ids):
    return 'user_id是:%s' % user_ids

if __name__ == '__main__':
    # app 运行的参数 ip地址,端口,是否开启调试
    app.run(debug=True)

"""
to_python转换器的程序运行:
1.浏览器向服务器发起访问:http://127.0.0.1:5000/test1/1,2,3
2.<list:user_ids>将'1,2,3'动态传到ListConverter对象内部进行regex正则匹配
3.匹配成功之后,再由to_python以','为分隔符,划分字符串,最后返回浏览器一个列表

"""

附上一张分析图供大家学习:

猜你喜欢

转载自www.cnblogs.com/888888CN/p/9474131.html
今日推荐