Response Status Code


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 模式中记录,例如自动文档

注:一些响应码表明相应没有 bodyFastAPI 知道这一点,并且能够生成没有响应正文的 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 及以上用来表示服务器错误,很少会直接使用它们,当应用代码或者服务器出现错误时,将会自动返回这些状态码中的一种

MDN

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
  • FastAPIfastapi.statusstarlette.status 相同,只是为了方便,其实 fastapi.status 直接来自 starlette.status

文章作者: qiufeng
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 qiufeng !
评论
 上一篇
Form Data Form Data
Form Data当需要接受表单字段而不是 JSON 时,可以使用 Form 注:需要借助 python-multipart 来使用表单 使用步骤from fastapi import FastAPI, Form app = FastAP
2020-04-17
下一篇 
Extra Models Extra Models
Extra Models有时候我们常常会有不止一个关系模型 用户模型尤其如此,因为: input model 需要有密码字段 output model 不应该有密码字段 database model 需要有哈希密码字段 警告:永远不要存
2020-04-16
  目录