使用一个响应参数
可以在路径操作函数中声明一个Response类型的参数,然后可以在临时响应对象中设置cookies。
from fastapi import FastAPI, Responseapp = 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将使用这个临时响应来提取cookie(还有头和状态代码),
并将它们放入包含返回值的最终响应中,该值由response_model过滤。
你也可以在依赖中声明Response参数,并且设置cookies(和headers)
直接返回一个Response
你也可以在返回Response时创建cookies,
为此,你可以在Return a Response Directly.中创建一个response作为描述
设置Cookies,并且返回它:
from fastapi import FastAPIfrom fastapi.responses import JSONResponseapp = 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
:::info
Tip
请记住,如果直接返回响应而不是使用response参数,那么FastAPI将直接返回它
因此,您必须确保数据的类型正确。 如果您返回一个JSONResponse,那么它与JSON兼容
而且,您没有发送任何本应通过response_model过滤的数据
:::
更多信息
:::info
技术细节
你也可以导入库从 from starlette.responses import Response 或 from starlette.responses import JSONResponse.
FastAPI也提供了同样的功能starlette.responses作为fastapi.responses的替代。仅仅为了方便,但大多数可用的response直接来自starlete。
:::
