Ir para o conteúdo

Cookies de Resposta

Usando um parâmetro Response

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.

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"}

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.

Retornando uma Response diretamente

Você também pode criar cookies ao retornar uma Response diretamente no seu código.

Para fazer isso, você pode criar uma resposta como descrito em Retornando uma Resposta Diretamente.

Então, defina os cookies nela e a retorne:

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

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.

Mais informações

Detalhes Técnicos

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.

Para ver todos os parâmetros e opções disponíveis, verifique a documentação no Starlette.