You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask路由如何匹配指定URL列表,非法路径返回404?

Flask路由精准匹配指定路径的优雅实现

给你两个不用在函数内做判断的优雅实现方式:

1. 使用内置any转换器(最简洁直接)

直接修改路由规则,用Flask内置的any转换器枚举允许的路径参数值,非枚举值的请求会自动返回404:

@app.route('/list/<any(user, course, teacher):object>')
def list_object(object):
    # 从数据库查询对应对象列表
    return object

这个写法会严格匹配user、course、teacher这几个参数,请求/list/fxxk这类非法路径时,Flask会直接返回404响应,完全不需要在函数里加额外判断逻辑。

2. 自定义URL转换器(适合动态扩展场景)

如果后续需要频繁新增允许的对象类型,不想每次都修改路由里的枚举值,可以自定义一个URL转换器:

from werkzeug.routing import BaseConverter

# 自定义转换器类
class AllowedObjectConverter(BaseConverter):
    def __init__(self, url_map, *allowed_items):
        super().__init__(url_map)
        # 生成匹配允许值的正则表达式
        self.regex = '|'.join(allowed_items)

# 把转换器注册到Flask应用
app.url_map.converters['allowed_obj'] = AllowedObjectConverter

# 使用自定义转换器
@app.route('/list/<allowed_obj(user, course, teacher):object>')
def list_object(object):
    # 从数据库查询对应对象列表
    return object

后续要新增允许的对象,比如student,只需要修改路由里的参数:<allowed_obj(user, course, teacher, student):object>即可,维护起来更灵活。

内容的提问来源于stack exchange,提问作者NickNiu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 01:13:14