使用一个响应参数

可以在路径操作函数中声明一个Response类型的参数,然后可以在临时响应对象中设置cookies。

  1. from fastapi import FastAPI, Response
  2. app = FastAPI()
  3. @app.post("/cookie-and-object/")
  4. def create_cookie(response: Response):
  5. response.set_cookie(key="fakesession", value="fake-cookie-session-value")
  6. return {"message": "Come to the dark side, we have cookies"}

然后,您可以返回所需的任何对象(dict、数据库模型等)
如果你声明了一个response_model,它仍将用于过滤和转换您返回的对象。

FastAPI将使用这个临时响应来提取cookie(还有头和状态代码),
并将它们放入包含返回值的最终响应中,该值由response_model过滤。

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

直接返回一个Response

你也可以在返回Response时创建cookies,
为此,你可以在Return a Response Directly.中创建一个response作为描述

设置Cookies,并且返回它:

  1. from fastapi import FastAPI
  2. from fastapi.responses import JSONResponse
  3. app = FastAPI()
  4. @app.post("/cookie/")
  5. def create_cookie():
  6. content = {"message": "Come to the dark side, we have cookies"}
  7. response = JSONResponse(content=content)
  8. response.set_cookie(key="fakesession", value="fake-cookie-session-value")
  9. return response

:::info Tip
请记住,如果直接返回响应而不是使用response参数,那么FastAPI将直接返回它
因此,您必须确保数据的类型正确。 如果您返回一个JSONResponse,那么它与JSON兼容
而且,您没有发送任何本应通过response_model过滤的数据 :::

更多信息

:::info 技术细节
你也可以导入库从 from starlette.responses import Responsefrom starlette.responses import JSONResponse.
FastAPI也提供了同样的功能starlette.responses作为fastapi.responses的替代。仅仅为了方便,但大多数可用的response直接来自starlete。 :::