falsk路由自定义正则匹配

# -*- coding: utf-8 -*-



"""
flask 自定义 url 匹配正则表达式
"""
from flask import Flask,views,url_for
from werkzeug.routing import BaseConverter


app=Flask(import_name=__name__)


# 1 写 RegexConverter 类
class RegexConverter(BaseConverter):
    """
    自定义 url 匹配正则表示式
    to_python
    to_url  基本上是固定写法 等于重写了  BaseConverter 中 to_python  to_url 方法
    """
    def __init__(self,map,regex):
        super(RegexConverter,self).__init__(map)
        self.regex=regex

    def to_python(self, value):
        """
        路由匹配时  匹配成功后传递给视图函数中参数的值

        :param value:
        :return:
        """
        return value

    def to_url(self, value):
        """
        使用url_for 反向生成url 时  传递的参数经过该方法处理 返回的值用于生成url中的参数
        :param value:
        :return:
        """
        val=super(RegexConverter, self).to_url(value)
        return val

# 2 将RegexConverter 添加到flask中
app.url_map.converters["regex"]=RegexConverter


# 3 regex('\d+')  这句 实际上 等于RegexConverter('\d+')
@app.route("/index/<regex('\d+'):nid>")
def index(nid):
    print(nid)
    print(url_for('index',nid='888'))
    return "Home"

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

  

posted @ 2021-02-01 21:47  Yuan_x  阅读(80)  评论(0编辑  收藏  举报