跳转至

响应 - 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"}

接着,就可以像返回字典、数据库模型一样返回任意所需的对象。

仍可以声明的 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 Responsefrom starlette.responses import JSONResponse

FastAPIfastapi.responsesstarlette.responses 一样,只是为开发者提供的快捷方式,但其中绝大部分可用的响应都直接继承自 Starlette。

Response 常用于设置响应头或 Cookie,因此,FastAPIfastapi.Response 中提供了支持。

所有可用参数及选项,详见 Starlette 官档