簡體   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