Response - Cambiar el Status Code¶
Probablemente ya has leído con anterioridad que puedes establecer un Response Status Code por defecto.
Pero en algunos casos necesitas retornar un status code diferente al predeterminado.
Casos de uso¶
Por ejemplo, imagina que quieres retornar un HTTP status code de "OK" 200
por defecto.
Pero si los datos no existen, quieres crearlos y retornar un HTTP status code de "CREATED" 201
.
Pero aún quieres poder filtrar y convertir los datos que retornas con un response_model
.
Para esos casos, puedes usar un parámetro Response
.
Usar un parámetro Response
¶
Puedes declarar un parámetro de tipo Response
en tu función de la operación de path (como puedes hacer para cookies y headers).
Y luego puedes establecer el status_code
en ese objeto de respuesta temporal.
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]
Y luego puedes retornar cualquier objeto que necesites, como normalmente lo harías (un dict
, un modelo de base de datos, etc).
Y si declaraste un response_model
, aún se usará para filtrar y convertir el objeto que retornaste.
FastAPI usará esa respuesta temporal para extraer el código de estado (también cookies y headers), y los pondrá en la respuesta final que contiene el valor que retornaste, filtrado por cualquier response_model
.
También puedes declarar la dependencia del parámetro Response
, y establecer el código de estado en ellos. Pero ten en cuenta que el último en establecerse será el que gane.