Você pode declarar um parâmetro do tipo Response na sua função de operação de rota.
E então você pode definir cookies nesse objeto de resposta temporário.
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"}
Em seguida, você pode retornar qualquer objeto que precise, como normalmente faria (um dict, um modelo de banco de dados, etc).
E se você declarou um response_model, ele ainda será usado para filtrar e converter o objeto que você retornou.
FastAPI usará essa resposta temporária para extrair os cookies (também os cabeçalhos e código de status) e os colocará na resposta final que contém o valor que você retornou, filtrado por qualquer response_model.
Você também pode declarar o parâmetro Response em dependências e definir cookies (e cabeçalhos) nelas.
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
Dica
Lembre-se de que se você retornar uma resposta diretamente em vez de usar o parâmetro Response, FastAPI a retornará diretamente.
Portanto, você terá que garantir que seus dados sejam do tipo correto. E.g. será compatível com JSON se você estiver retornando um JSONResponse.
E também que você não esteja enviando nenhum dado que deveria ter sido filtrado por um response_model.
Você também poderia usar from starlette.responses import Response ou from starlette.responses import JSONResponse.
FastAPI fornece as mesmas starlette.responses em fastapi.responses apenas como uma conveniência para você, o desenvolvedor. Mas a maioria das respostas disponíveis vem diretamente do Starlette.
E como o Response pode ser usado frequentemente para definir cabeçalhos e cookies, o FastAPI também o fornece em fastapi.Response.