Короткий ответ
Функция jsonify() формирует тело ответа в формате JSON, а статус-код задаётся как второй элемент кортежа, возвращаемого из view-функции, либо через make_response.
Как это работает подробнее
Flask позволяет view-функции возвращать не только строку/словарь, но и кортеж (тело, статус) или (тело, статус, заголовки). jsonify() сериализует Python-объект в JSON и устанавливает правильный Content-Type.
Пример кода
example.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/items/<int:item_id>")
def get_item(item_id):
item = find_item(item_id)
if item is None:
return jsonify({"error": "not found"}), 404
return jsonify(item), 200
# GET /items/999 (не существует) -> статус 404, тело {"error": "not found"}Что использовать на практике
- Практика. Для кодов ошибок (400, 404, 409 и т. п.) удобно возвращать
jsonify({...}), код. Если нужно также выставить заголовки, используютmake_response(jsonify(...), код)и дальше.headers[...] = ....
Подводные камни
- Риск. Возвращают только
jsonify(data)без статуса для ошибок, из-за чего клиент получает 200 даже при логической ошибке; путаютabort(404)(сразу прерывает обработку и генерирует HTML/JSON ошибку через error handler) с обычным возвратом кортежа.