响应状态码¶
与指定响应模型的方式相同,你也可以在任何*路径操作*中使用参数 `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。
更改默认值¶
稍后,在高级用户指南中,你将看到如何返回与你在此处声明的默认状态码不同的状态码。