flask(4)自定义路由转换

@app.route('/index/<int:nid>', methods=["GET", "POST"])
def hello_world(nid):
    print(nid, type(nid))
    return 'Hello World!'

# 11 <class 'int'>

# Not Found
from flask import Flask, views, url_for
from werkzeug.routing import BaseConverter

app = Flask(import_name=__name__)


class RegexConverter(BaseConverter):
    """
    自定义URL匹配正则表达式
    """

    def __init__(self, map, regex):
        super(RegexConverter, self).__init__(map)
        self.regex = regex

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

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


# 添加到flask中
app.url_map.converters['regex'] = RegexConverter


@app.route('/index/<regex("\d+"):nid>')
def index(nid):
    print(nid)
    print(url_for('index', nid='888'))
    return 'Index'


if __name__ == '__main__':
    app.run()
    
# http://127.0.0.1:5000/index/11
posted @ 2021-12-12 22:27  下个ID见  阅读(21)  评论(0)    收藏  举报