响应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
Tip
请记住,如果你直接返回一个响应而不是使用 Response
参数,FastAPI 会直接返回它。
所以,你需要确保你的数据类型是正确的。例如,如果你返回的是 JSONResponse
,那么数据需要与 JSON 兼容。
同时,你还需要确保没有发送任何应该被 response_model
过滤的数据。
更多信息¶
"技术细节"
你也可以使用 from starlette.responses import Response
或 from starlette.responses import JSONResponse
。
FastAPI 提供了与 fastapi.responses
相同的 starlette.responses
,只是为了方便你,开发者。但大多数可用的响应直接来自 Starlette。
由于 Response
经常被用来设置 headers 和 cookies,FastAPI 也在 fastapi.Response
中提供了它。
要查看所有可用的参数和选项,请查看 Starlette 的文档。