Response Status Code
和声明返回模型一样,可以在装饰器函数中用 status_code
参数声明 HTTP 状态码,例如
from fastapi import FastAPI
app = FastAPI()
@app.post("/items/", status_code=201)
async def create_item(name: str):
return {"name": name}
注: status_code
是装饰器的参数,而不是 Query
等路径操作函数的参数
status_code
会:
- 在响应中返回状态码
- 在 OpanAPI 模式中记录,例如自动文档
注:一些响应码表明相应没有 body,FastAPI 知道这一点,并且能够生成没有响应正文的 OpenAPI 文档
About HTTP status codes
在 HTTP 中,将发送 3 位数的数字状态码作为响应的一部分
这些状态代码有一个相关联的名字用来识别它们,但是重要的部分是数字
简而言之:
100
及以上用来表示信息,很少会直接使用它们,具有这些状态码的响应不应有正文200
及以上表明成功响应,它们也是最常被使用的:200
是默认的状态码,表示OK
201
表示created
,常用于在数据库中新创建了一个记录204
表示No Content
,被用于没有内容返回给客户端,因此响应不应有正文
300
及以上用来表示重定向,这些状态码可能有或者没有响应正文,除了304
Not Modified
不能有响应正文400
及以上用来表示客户端错误,这也是第二常用的:404
用来表示Not Found
- 对于客户端产生的通用错误,可以仅使用
400
500
及以上用来表示服务器错误,很少会直接使用它们,当应用代码或者服务器出现错误时,将会自动返回这些状态码中的一种
Shortcut to remember the names
可以使用 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}
它们只是为了便利,它们和状态码有一样的数值,只是它们可以使用 IDE 的自动补全功能
技术细节:
- 也可以使用
from starlette import status
- FastAPI 的
fastapi.status
和starlette.status
相同,只是为了方便,其实fastapi.status
直接来自starlette.status