跳到内容

响应 Cookies

使用 Response 参数

你可以在 路径操作函数 中声明一个类型为 Response 的参数。

然后你可以在这个 临时 响应对象中设置 cookies。

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

然后你可以像往常一样返回任何你需要的对象(一个 dict、一个数据库模型等)。

如果你声明了 response_model,它仍然会被用来过滤和转换你返回的对象。

FastAPI 将使用这个 临时 响应来提取 cookies(也包括 headers 和状态码),并将它们放入最终的响应中,该响应包含你返回的值,并根据任何 response_model 进行了过滤。

你也可以在依赖项中声明 Response 参数,并在其中设置 cookies(和 headers)。

直接返回 Response

你也可以在代码中直接返回 Response 时创建 cookies。

要做到这一点,你可以按照 直接返回响应 中描述的方法创建一个响应。

然后在其上设置 Cookies,并将其返回。

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

提示

请记住,如果你直接返回响应而不是使用 Response 参数,FastAPI 将直接返回它。

因此,你必须确保你的数据类型正确。例如,如果你返回 JSONResponse,它需要与 JSON 兼容。

并且你也没有发送任何应该被 response_model 过滤掉的数据。

更多信息

技术细节

你也可以使用 from starlette.responses import Responsefrom starlette.responses import JSONResponse

FastAPI 提供与 starlette.responses 相同的 fastapi.responses,只是为了方便开发者。但大多数可用的响应都直接来自 Starlette。

由于 Response 经常用于设置 headers 和 cookies,FastAPI 也将其提供在 fastapi.Response

要查看所有可用的参数和选项,请查阅 Starlette 中的文档