您可以使用指定响应模型的相同方法,也可以
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状态代码的数字。
它会:
在响应中返回该状态码。
在OpenAPI模式中(以及在用户界面中)将其记录为:
注意
一些响应代码(请参阅下一节)表明响应没有主体。
FastAPI知道这一点,并将生成表明没有响应正文的OpenAPI文档。
关于HTTP状态码
注意
如果您已经知道什么是HTTP状态代码,请跳到下一部分。
在HTTP中,您将发送3位数的数字状态代码作为响应的一部分。
这些状态代码具有关联的名称以识别它们,但重要的是数字。
简而言之:
100
以上为“信息”。
您很少直接使用它们。
具有这些状态代码的响应不能带有主体。
200
和以上是针对“成功”响应的。
这些是您最常使用的。
200
是默认状态代码,表示一切都正常。
另一个示例是
201
“已创建”。
通常在数据库中创建新记录后使用。
特殊情况是
204
“无内容”。
当没有内容返回给客户端时使用此响应,因此该响应必须没有正文。
300
以上是“重定向”的。
具有这些状态代码的响应可能带有或可能没有正文,但
304
“ Not Modified”
除外
,
该正文
不得包含一个。
400
及以上是针对“客户端错误”响应的。
这些是您可能最常使用的第二种类型。
例如
404
,对于“未找到”响应。
对于来自客户端的一般错误,您可以使用
400
。
500
以上是针对服务器错误的信息。
您几乎永远不会直接使用它们。
当您的应用程序代码或服务器中的某些部分出现问题时,它将自动返回这些状态代码之一。
小费
要了解有关每个状态代码以及适用于什么的代码的更多信息,请查看
有关HTTP状态代码
的
MDN
文档
。
记住名字的捷径
让我们再次看前面的例子:
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
提供相同
starlette.status
的
fastapi.status
,就像为你的方便,开发人员。
但它直接来自Starlette。
更改默认
稍后,在“
高级用户指南”中
,您将看到如何返回与在此声明的默认状态码不同的状态码。