跳到内容

响应状态码

与指定响应模型的方式相同,你也可以在任何*路径操作*中使用参数 `status_code` 来声明用于响应的 HTTP 状态码

  • @app.get()
  • @app.post()
  • @app.put()
  • @app.delete()
  • 等等。
from fastapi import FastAPI

app = FastAPI()


@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}

注意

请注意,`status_code` 是“装饰器”方法(`get`、`post` 等)的一个参数,而不是你的*路径操作函数*的参数,这与所有参数和请求体不同。

`status_code` 参数接收一个 HTTP 状态码的数字。

信息

`status_code` 也可以接收一个 `IntEnum`,例如 Python 的 `http.HTTPStatus`

它会

  • 在响应中返回该状态码。
  • 在 OpenAPI 模式中(以及用户界面中)如此记录。

注意

某些响应码(参见下一节)表示响应不包含响应体。

FastAPI 知道这一点,并会生成 OpenAPI 文档来声明没有响应体。

关于 HTTP 状态码

注意

如果你已经了解 HTTP 状态码,请跳到下一节。

在 HTTP 中,你作为响应的一部分发送一个 3 位数字的状态码。

这些状态码都有一个相关的名称以便识别,但重要的部分是数字。

简而言之

  • 100 - 199 用于“信息”。你很少直接使用它们。带有这些状态码的响应不能有响应体。
  • 200 - 299 用于“成功”响应。这些是你最常使用的。
    • 200 是默认状态码,表示一切“正常”。
    • 另一个例子是 `201`,“已创建”。它通常用于在数据库中创建新记录之后。
    • 一个特殊情况是 `204`,“无内容”。当没有内容返回给客户端时,会使用此响应,因此响应不得包含响应体。
  • 300 - 399 用于“重定向”。带有这些状态码的响应可能包含响应体,也可能不包含,但 `304`,“未修改”,则必须不包含响应体。
  • 400 - 499 用于“客户端错误”响应。这些是你可能使用第二多的类型。
    • 例如 `404`,表示“未找到”响应。
    • 对于客户端的通用错误,你可以直接使用 `400`。
  • 500 - 599 用于服务器错误。你几乎从不直接使用它们。当你的应用程序代码或服务器的某个部分出错时,它将自动返回这些状态码之一。

提示

要了解每个状态码及其用途,请查阅 MDN 关于 HTTP 状态码的文档

记住名称的快捷方式

让我们再看看之前的例子

from fastapi import FastAPI

app = FastAPI()


@app.post("/items/", status_code=201)
async def create_item(name: str):
    return {"name": name}

201 是“已创建”状态码。

但是你不需要记住每个代码的含义。

你可以使用 `fastapi.status` 中的便捷变量。

from fastapi import FastAPI, status

app = FastAPI()


@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):
    return {"name": name}

它们只是一个便捷方式,它们持有相同的数字,但这样你就可以使用编辑器的自动补全功能来找到它们

技术细节

你也可以使用 `from starlette import status`。

FastAPI 提供了与 `fastapi.status` 相同的 `starlette.status`,仅仅是为了方便开发者。但它直接来自 Starlette。

更改默认值

稍后,在高级用户指南中,你将看到如何返回与你在此处声明的默认状态码不同的状态码。