Puedes declarar un parámetro de tipo Response en tu función de operación de ruta.
Y luego puedes establecer cookies en ese objeto de respuesta temporal.
fromfastapiimportFastAPI,Responseapp=FastAPI()@app.post("/cookie-and-object/")defcreate_cookie(response:Response):response.set_cookie(key="fakesession",value="fake-cookie-session-value")return{"message":"Come to the dark side, we have cookies"}
Y luego puedes devolver cualquier objeto que necesites, como lo harías normalmente (un dict, un modelo de base de datos, etc).
Y si declaraste un response_model, este se seguirá usando para filtrar y convertir el objeto que devolviste.
FastAPI usará esa respuesta temporal para extraer las cookies (también headers y código de estado), y las pondrá en la respuesta final que contiene el valor que devolviste, filtrado por cualquier response_model.
También puedes declarar el parámetro Response en dependencias, y establecer cookies (y headers) en ellas.
Luego establecer Cookies en ella, y luego devolverla:
fromfastapiimportFastAPIfromfastapi.responsesimportJSONResponseapp=FastAPI()@app.post("/cookie/")defcreate_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")returnresponse
Consejo
Ten en cuenta que si devuelves una respuesta directamente en lugar de usar el parámetro Response, FastAPI la devolverá directamente.
Así que, tendrás que asegurarte de que tus datos sean del tipo correcto. Por ejemplo, que sean compatibles 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.
También podrías usar from starlette.responses import Response o from starlette.responses import JSONResponse.
FastAPI proporciona las mismas starlette.responses que fastapi.responses solo como una conveniencia para ti, el desarrollador. Pero la mayoría de las respuestas 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.