首页 > 其他分享 >FastAPI学习-16.响应状态码 status_code

FastAPI学习-16.响应状态码 status_code

时间:2023-10-27 12:35:56浏览次数:34  
标签:status 状态 code HTTP 16 app 响应

前言

与指定响应模型的方式相同,你也可以在以下任意的_路径操作_中使用 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 是「装饰器」方法(getpost 等)的一个参数。不像之前的所有参数和请求体,它不属于_路径操作函数_。

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

status_code 也能够接收一个 IntEnum 类型,比如 Python 的 http.HTTPStatus

它将会:

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

![[Pasted image 20230718112653.png]]

一些响应状态码(请参阅下一部分)表示响应没有响应体。
FastAPI 知道这一点,并将生成表明没有响应体的 OpenAPI 文档。

关于 HTTP 状态码

如果你已经了解什么是 HTTP 状态码,请跳到下一部分。

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

这些状态码有一个识别它们的关联名称,但是重要的还是数字。

简而言之:

  • 100 及以上状态码用于「消息」响应。你很少直接使用它们。具有这些状态代码的响应不能带有响应体。
  • 200 及以上状态码用于「成功」响应。这些是你最常使用的。
  • 200 是默认状态代码,它表示一切「正常」。
  • 另一个例子会是 201,「已创建」。它通常在数据库中创建了一条新记录后使用。
  • 一个特殊的例子是 204,「无内容」。此响应在没有内容返回给客户端时使用,因此该响应不能包含响应体。
  • 300 及以上状态码用于「重定向」。具有这些状态码的响应可能有或者可能没有响应体,但 304「未修改」是个例外,该响应不得含有响应体。
  • 400 及以上状态码用于「客户端错误」响应。这些可能是你第二常使用的类型。
  • 一个例子是 404,用于「未找到」响应。
  • 对于来自客户端的一般错误,你可以只使用 400
  • 500 及以上状态码用于服务器端错误。你几乎永远不会直接使用它们。当你的应用程序代码或服务器中的某些部分出现问题时,它将自动返回这些状态代码之一。

记住名称的捷径

让我们再次看看之前的例子:

@app.post("/items/", status_code=201)

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}

它们只是一种便捷方式,它们具有同样的数字代码,但是这样使用你就可以使用编辑器的自动补全功能来查找它们:

![[Pasted image 20230916091706.png]]

你也可以使用 from starlette import status
为了给你(即开发者)提供方便,FastAPI 提供了与 starlette.status 完全相同的 fastapi.status。但它直接来自于 Starlette。

总结

响应状态码可以是数字类型,如:201,400
也可以是status.HTTP_201_CREATED



标签:status,状态,code,HTTP,16,app,响应
From: https://blog.51cto.com/u_15249893/8052672

相关文章

  • FastAPI学习-15.JSON 编码器 jsonable_encoder
    前言在某些情况下,您可能需要将数据类型(如Pydantic模型)转换为与JSON兼容的数据类型(如dict、list等)。比如,如果您需要将其存储在数据库中。对于这种要求, FastAPI提供了jsonable_encoder()函数。使用jsonable_encoderjsonable_encoder在实际应用场景中,可能需要将数据类型(如:Pydanti......
  • AtCoder Beginner Contest 216 H Random Robots
    洛谷传送门AtCoder传送门下文令\(n\)为原题中的\(K\),\(m\)为原题中的\(N\)。首先概率转方案数,最后除\(2^{nm}\)即可。考虑一个指数级暴力:枚举每个bot的终点\(y_i\)(因为存在不能相交的限制,需要满足\(y_1<y_2<\cdots<y_n\)),相当于为每个bot选一个\((0,x_i)......
  • [Leetcode] 0104. 二叉树的最大深度
    104.二叉树的最大深度题目描述给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7],3/\920/\157返回它的最大深度 3。......
  • 关于亚马逊 CodeWhisperer 的测试反馈
    CodeWhisperer是亚马逊推出的实时AI编程助手,是一项基于机器学习的服务,它可以分析开发者在集成开发环境(IDE)中的注释和代码,并根据其内容生成多种代码建议。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛......
  • #yyds干货盘点# LeetCode程序员面试金典:生命游戏
    题目根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机。给定一个包含m×n个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1即为活细胞(live),或0即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂......
  • #yyds干货盘点# LeetCode程序员面试金典:最小操作次数使数组元素相等 II
    题目给你一个长度为n的整数数组nums,返回使所有数组元素相等需要的最小操作数。在一次操作中,你可以使数组中的一个元素加1或者减1。 示例1:输入:nums=[1,2,3]输出:2解释:只需要两次操作(每次操作指南使一个元素加1或减1):[1,2,3] => [2,2,3] => [2,2,2]示......
  • leetcode98-验证二叉搜索树
    一开始没有考虑到左子树的所有节点都要小于根节点,右子树要大于根节点,本质上是边界没有考虑仔细,所以比较时需向上比较(和父节点)而不是向下比较(和子节点比大小)根节点没有父节点,因此初始化时引用最大最小值即可,注意这里的数值范围点击查看代码classSolution{publicboolean......
  • AtCoder Regular Contest 164 F Subtree Reversi
    洛谷传送门AtCoder传送门非常好题目。发现每个点颜色被反转的次数是固定的,为其深度(根结点深度为\(0\))。于是可以看作是,一放棋子就得到分数。那么先手取偶数层和后手取奇数层都会使先手得分,所以双方的目标都是尽可能多取偶数层的结点。考虑若一开始有偶数层的叶子,那么当前的......
  • CF1672
    ALogChopping直接把每次总切割数算出来就行#include<bits/stdc++.h>usingnamespacestd;intt;signedmain(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>t; while(t--){ intn; inttot=0; cin>>n; for(inti=1;i<=n;i++){......
  • Codeforces Round#905 解题报告
    按理来说最近开始了一天一套div2计划,第一天做了一套Div1,第二天做了hustfc,第三天因为要赶latex期末考试,所以什么也没做。明天写一下hustfc比较牛的几题。A暴力怎么做,是不是加加加,然后判断。B本质上是让长度为\(i\)的后缀全是\(0\)那么找到最短的有\(i\)个\(0\)......