响应 Cookie¶
使用 Response 参数¶
您可以在您的路径操作函数中声明一个 Response 类型的参数。
然后,您就可以在该临时的响应对象中设置 cookie。
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 将使用这个临时响应来提取 cookie(以及 headers 和状态码),并将它们放入包含您返回的值的最终响应中,并会由 response_model 进行过滤。
您也可以在依赖项中声明 Response 参数,并在其中设置 cookie(和 headers)。
直接返回 Response¶
您也可以在代码中直接返回 Response 时创建 cookie。
为此,您可以按照 直接返回 Response 中的描述来创建一个响应。
然后在其上设置 Cookie,然后返回它
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 Response 或 from starlette.responses import JSONResponse。
FastAPI 提供与 fastapi.responses 相同的 starlette.responses 只是为了方便开发者。但大多数可用的响应直接来自 Starlette。
由于 Response 经常用于设置 headers 和 cookie,FastAPI 也将其提供了 fastapi.Response。
要查看所有可用的参数和选项,请参阅 Starlette 中的文档。