步骤
创建自定义转换器类
- 继承
werkzeug.routing.BaseConverter
。- 实现
to_python
和(可选)to_url
方法。将转换器注册到 Flask 应用
在路由中使用转换器
示例
创建转换器
假设需要自定义一个转换器 FourDigitYearConverter
,用于匹配四位年份。
python
# converters.py
from werkzeug.routing import BaseConverter
class FourDigitYearConverter(BaseConverter):
def __init__(self, url_map):
super().__init__(url_map)
self.regex = r'\d{4}' # 匹配四位数字
def to_python(self, value):
return int(value) # 转换为整数
def to_url(self, value):
return f"{value:04d}" # 确保是四位数字
注册转换器
在 Flask 应用中注册转换器:
python
from flask import Flask
from converters import FourDigitYearConverter
app = Flask(__name__)
# 注册转换器
app.url_map.converters['yyyy'] = FourDigitYearConverter
定义路由
python
@app.route('/year/<yyyy:year>/')
def year_view(year):
return f"The year is {year}."
测试路由
访问 /year/2024/
时:
- URL 参数
2024
被捕获并转换为整数2024
。
反向生成 URL
python
with app.test_request_context():
url = flask.url_for('year_view', year=2024)
print(url) # 输出:/year/2024/