繁体   English   中英

从烧瓶返回带有 JSON 正文的 HTTP 失败(例如 500)响应?

[英]Return an HTTP fail (e.g. 500) response with JSON body from flask?

从flask 1.1.x开始,很容易返回一个JSON响应体以及一个HTTP成功代码,例如

return {"success": 1, "message": "You did it!"}, 200

但是,以相同的方式返回 HTTP 失败状态

return {"success": 0, "message": "You screwed up."}, 400

似乎只返回响应头和消息,(例如HTTP/1.0 INVALID REQUEST

Content-type 标头(正确)表示application/json ,但是主体为空。 任何非 2xx 类状态代码都会发生这种情况。

Flask 文档暗示我应该能够做到这一点,但是,我尝试过的一切似乎都不起作用。 这包括创建专门的错误处理程序,如

@app.errorhandler(400)
def custom400(error):
    return jsonify({'message': error})

然后调用abort(400, 'my error message') ,这不起作用,因为处理程序的error参数不是传递给abort的字符串,但是,它始终是 HTTP 错误类型的错误对象(例如 410 -> <GONE Gone>

这是“正常”的 HTTP 响应行为,还是 Flask 做一些奇怪的事情?

事实证明,这比其他任何东西都更像是 PEBKAC。 我在$.ajax.error处理程序中设置了一个断点,在断点触发时查看浏览器 (chrome) 调试窗口中返回的响应。

但是,直到此处理程序存在之后,响应的正文才可用于调试窗口。 一旦我继续执行error处理程序,JSON 响应正文就会按预期通过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM