Flask如何全局配置abort函数返回纯文本错误而非HTML格式
Flask全局修改abort返回纯文本格式的实现方案
Flask中abort触发的所有错误本质都是HTTPException类的子类实例,你可以直接注册全局的HTTPException异常处理器,一次性捕获所有4xx、5xx错误,无需逐个配置错误码,统一返回纯文本格式:
from flask import Flask, abort, Response, HTTPException app = Flask(__name__) # 全局捕获所有HTTP异常,统一处理返回格式 @app.errorhandler(HTTPException) def handle_all_http_error(e): # e.description就是你调用abort时传入的第二个参数errMsg # e.code是对应的错误状态码 return Response( response=e.description, status=e.code, mimetype="text/plain" ) # 测试示例 @app.route("/api/<res_id>") def get_resource(res_id): if not res_id.isdigit(): abort(400, "资源ID必须为数字") if int(res_id) > 1000: abort(404, "请求的资源不存在") return {"data": "test"}
效果验证
调用abort(404, "请求的资源不存在")时,返回的响应如下:
- 状态码:404
- Content-Type:text/plain
- 响应体:
请求的资源不存在
完全没有预置的HTML模板内容,符合API接口的返回要求。
扩展说明
如果后续需要改为JSON格式的错误返回,只需要修改处理器的返回逻辑即可:
from flask import jsonify @app.errorhandler(HTTPException) def handle_all_http_error(e): return jsonify({ "code": e.code, "msg": e.description }), e.code
内容的提问来源于stack exchange,提问作者Jordan Barrett
相关产品推荐
相关产品推荐

