# -*- 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()