python - 从烧瓶返回带有 JSON 正文的 HTTP 失败(例如 500)响应?
问题描述
从 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 响应行为,还是烧瓶做了一些奇怪的事情?
解决方案
事实证明,这比其他任何东西都更像 PEBKAC。我在我的$.ajax.error
处理程序中设置了一个断点,在断点触发时查看浏览器(chrome)调试窗口中返回的响应。
但是,在此处理程序存在之后,调试窗口才能使用响应的主体。一旦我继续执行error
处理程序,JSON 响应主体就会按预期通过。
推荐阅读
- python - 如何生成与已经生成的随机数不同的随机数?
- angular - 如何对无法加载的 Angular 应用程序进行故障排除?
- php - 在字符串上搜索多维数组以检查相关词是否存在php
- python - 如何为回归和分类创建多输出 Tensorflow 2 自定义训练循环?
- python - 读取python文件夹中所有文件的默认函数
- python - StringVar() as abc='123456779'
- java - 如何在 java 中修复“未能抛出 IllArgumentException”
- graphql - Apollo+GraphQL - 启发式片段手动匹配
- excel - 递归 Workbook_SheetChange
- python - 如何在 numpydoc 中键入 int 列表