You need to enable JavaScript to run this app. 如何在Flask中针对特定域名模式配置自定义错误处理器
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flask中针对特定域名模式配置自定义错误处理器

你当前的写法之所以对未定义的api子域名路径不生效,是因为蓝图的错误处理器仅会处理该蓝图下路由抛出的错误。如果请求路径没有命中api蓝图定义的任何路由,Flask会直接走应用全局的404逻辑,不会触发蓝图的错误处理器。下面给出两种可落地的解决方案:

方案1:使用应用级全局错误处理器判断子域名

这个方案实现最简单,直接在全局404处理逻辑中根据子域名类型返回对应格式的响应即可。
首先你需要先配置Flask的SERVER_NAME确保子域名可以被正确识别:

app.config['SERVER_NAME'] = 'localhost:5000'

之后注册全局404错误处理器:

from flask import request, jsonify, render_template

@app.errorhandler(404)
def global_404_handler(e):
    if request.subdomain == 'api':
        return jsonify(error=str(e)), 404
    # 非api子域名返回默认HTML错误页,按你原有逻辑实现即可
    return render_template('errors/404.html'), 404

方案2:给api蓝图增加万能匹配兜底路由

如果你不想把业务逻辑写到全局错误处理器里,可以在api蓝图下新增一个优先级最低的万能匹配路由,所有未命中具体业务路由的api子域名请求都会走到这个路由,主动抛出404即可触发你已经定义好的蓝图错误处理器:

# 新增到你的api蓝图定义中即可
@api.route('/', subdomain='api', defaults={'path': ''})
@api.route('/<path:path>', subdomain='api')
def api_catch_all(path):
    abort(404)

这个方案不需要修改全局错误处理逻辑,所有api相关的错误逻辑都收敛在api蓝图内部,耦合度更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 07:18:03