响应 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(以及标头和状态码),并将它们放入包含您返回的值的最终响应中,并通过任何 response_model
进行过滤。
您也可以在依赖项中声明 Response
参数,并在其中设置 cookie(和标头)。
直接返回 Response
¶
您也可以在代码中直接返回 Response
时创建 cookie。
为此,您可以像直接返回响应中描述的那样创建一个响应。
然后在其中设置 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
可以经常用于设置标头和 cookie,因此 FastAPI 也在 fastapi.Response
中提供它。
要查看所有可用的参数和选项,请查看Starlette 中的文档。