跳至内容

响应 - 更改状态码

您可能之前已经阅读过,您可以设置默认的 响应状态码

但在某些情况下,您需要返回与默认值不同的状态码。

用例

例如,假设您想默认返回 "OK" 200 的 HTTP 状态码。

但如果数据不存在,您想创建它并返回 "CREATED" 201 的 HTTP 状态码。

但您仍然希望能够使用 response_model 过滤和转换您返回的数据。

对于这些情况,您可以使用 Response 参数。

使用 Response 参数

您可以在 *路径操作函数* 中声明类型为 Response 的参数(就像您可以对 cookie 和标头那样做)。

然后,您可以在该 *临时* 响应对象中设置 status_code

from fastapi import FastAPI, Response, status

app = FastAPI()

tasks = {"foo": "Listen to the Bar Fighters"}


@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):
    if task_id not in tasks:
        tasks[task_id] = "This didn't exist before"
        response.status_code = status.HTTP_201_CREATED
    return tasks[task_id]

然后,您可以像往常一样返回您需要的任何对象(dict、数据库模型等)。

如果您声明了 response_model,它仍然会用于过滤和转换您返回的对象。

FastAPI 将使用该 *临时* 响应来提取状态码(以及 cookie 和标头),并将它们放入包含您返回的值的最终响应中,该值将通过任何 response_model 进行过滤。

您也可以在依赖项中声明 Response 参数,并在其中设置状态码。但请记住,最后设置的一个将获胜。