Response - Изменение статус-кода¶
Вы, вероятно, уже читали о том, что можно установить статус-код ответа по умолчанию.
Но в некоторых случаях нужно вернуть другой статус-код, отличный от значения по умолчанию.
Пример использования¶
Например, представьте, что вы хотите по умолчанию возвращать HTTP статус-код «OK» 200
.
Но если данные не существовали, вы хотите создать их и вернуть HTTP статус-код «CREATED» 201
.
При этом вы всё ещё хотите иметь возможность фильтровать и преобразовывать возвращаемые данные с помощью response_model
.
Для таких случаев вы можете использовать параметр Response
.
Использование параметра Response
¶
Вы можете объявить параметр типа Response
в вашей функции обработки пути (как и для cookies и HTTP-заголовков).
И затем вы можете установить status_code
в этом временном объекте ответа.
from fastapi import FastAPI, Response, status
app = FastAPI()
tasks = {"foo": "Listen to the Bar Fighters"}
@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):
if task_id not in tasks:
tasks[task_id] = "This didn't exist before"
response.status_code = status.HTTP_201_CREATED
return tasks[task_id]
После этого вы можете вернуть любой объект, который вам нужен, как обычно (dict
, модель базы данных и т.д.).
И если вы объявили response_model
, он всё равно будет использоваться для фильтрации и преобразования возвращаемого объекта.
FastAPI будет использовать этот временный ответ для извлечения статус-кода (а также cookies и HTTP-заголовков) и поместит их в финальный ответ, который содержит возвращаемое вами значение, отфильтрованное любым response_model
.
Вы также можете объявить параметр Response
в зависимостях и установить в них статус-код. Но помните, что последнее установленное значение будет иметь приоритет.