Вернуть HTTP-ошибку (например, 500) с телом JSON из flask? - PullRequest
1 голос
/ 10 марта 2020

Начиная с flask 1.1.x, легко вернуть тело ответа JSON вместе с кодом успеха HTTP, таким как

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

Однако, возвращая состояние ошибки HTTP то же самое way

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

, кажется, только возвращает заголовок ответа и сообщение (например, HTTP/1.0 INVALID REQUEST)

Заголовок типа контента (правильно) говорит 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 делает что-то странное?

1 Ответ

0 голосов
/ 10 марта 2020

Оказывается, это больше ПЕБКА C, чем что-либо еще. Я установил точку останова в своем обработчике $.ajax.error, просматривая возвращенный ответ в окне отладки браузера (chrome) при срабатывании точки останова.

Но тело ответа недоступно до окна отладки, пока ПОСЛЕ этого обработчик не существует. Как только я продолжил выполнение обработчика error, тело ответа JSON было получено, как и ожидалось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...