响应 - 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 Response 或 from starlette.responses import JSONResponse。
FastAPI 的 fastapi.responses 与 starlette.responses 一样,只是为开发者提供的快捷方式,但其中绝大部分可用的响应都直接继承自 Starlette。
Response 常用于设置响应头或 Cookie,因此,FastAPI 在 fastapi.Response 中提供了支持。
所有可用参数及选项,详见 Starlette 官档。