反向生成URL
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/index', methods=['GET', 'POST'], endpoint='n1')
def index():
v1 = url_for('n1')
print(v1)
return "Index"
if __name__ == '__main__':
app.run()
- 使用
url_for
方法反向生成url endpoint
: 添加别名, 默认是函数名
在路由后面添加ID属性
@app.route('/index/<int:nid>', methods=['GET', 'POST'])
index
后面支持填写一个数字, 这个数字会直接传递给函数的nid
参数.
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/index/<int:nid>', methods=['GET', 'POST'])
def index(nid):
print(nid)
return "Index"
if __name__ == '__main__':
app.run()
- 除了int , 还支持以下类型
@app.route('/index/<username>')
: 代表直接传递一个字符串@app.route('/index/<int:post_id>')
: 后面填写一个数字@app.route('/index/<float:post_id>')
: 转换成一个浮点数@app.route('/index/<path:path>')
: 拼接一个url
自定义URL转换器
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
"""
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex
def to_python(self, value):
"""
路由匹配时, 匹配成功后传递给视图函数中参数的值
"""
return int(value)
def to_url(self, value):
"""
使用url_for反向生成URL时, 传递的参数经过该方法处理, 返回的值用于生成URL中的参数
"""
val = super(RegexConverter, self).to_url(value)
return val
把转换器添加到Flask中
app.url_map.converters['regex'] = RegexConverter
- 定义的转换器名字是regex
- 自定义的转换器对应的类是
RegexConverter
使用自定义转换器
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/index/<regex("\d+"):nid>', methods=['GET', 'POST'])
def index(nid):
print(nid)
return "Index"
if __name__ == '__main__':
app.run()
- 正则表达式匹配成功以后, 就会执行
to_python
方法
反向生成url
url_for('index', nid=999)