Cookies de Response¶
Usar un parámetro Response
¶
Puedes declarar un parámetro de tipo Response
en tu path operation function.
Y luego puedes establecer cookies en ese objeto de response temporal.
from fastapi import FastAPI, Response
app = FastAPI()
@app.post("/cookie-and-object/")
def create_cookie(response: Response):
response.set_cookie(key="fakesession", value="fake-cookie-session-value")
return {"message": "Come to the dark side, we have cookies"}
Y entonces puedes devolver cualquier objeto que necesites, como normalmente lo harías (un dict
, un modelo de base de datos, etc).
Y si declaraste un response_model
, todavía se utilizará para filtrar y convertir el objeto que devolviste.
FastAPI utilizará ese response temporal para extraer las cookies (también los headers y el código de estado), y las pondrá en el response final que contiene el valor que devolviste, filtrado por cualquier response_model
.
También puedes declarar el parámetro Response
en las dependencias, y establecer cookies (y headers) en ellas.
Devolver una Response
directamente¶
También puedes crear cookies al devolver una Response
directamente en tu código.
Para hacer eso, puedes crear un response como se describe en Devolver un Response Directamente.
Luego establece Cookies en ella, y luego devuélvela:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.post("/cookie/")
def create_cookie():
content = {"message": "Come to the dark side, we have cookies"}
response = JSONResponse(content=content)
response.set_cookie(key="fakesession", value="fake-cookie-session-value")
return response
Consejo
Ten en cuenta que si devuelves un response directamente en lugar de usar el parámetro Response
, FastAPI lo devolverá directamente.
Así que tendrás que asegurarte de que tus datos son del tipo correcto. Por ejemplo, que sea compatible con JSON, si estás devolviendo un JSONResponse
.
Y también que no estés enviando ningún dato que debería haber sido filtrado por un response_model
.
Más información¶
Detalles Técnicos
También podrías usar from starlette.responses import Response
o from starlette.responses import JSONResponse
.
FastAPI proporciona los mismos starlette.responses
como fastapi.responses
solo como una conveniencia para ti, el desarrollador. Pero la mayoría de los responses disponibles vienen directamente de Starlette.
Y como el Response
se puede usar frecuentemente para establecer headers y cookies, FastAPI también lo proporciona en fastapi.Response
.
Para ver todos los parámetros y opciones disponibles, revisa la documentación en Starlette.