FastAPI之响应状态码

使用FastAPI自定义响应状态码

FastAPI 是一个现代、快速的 web 框架,用于构建API服务,它允许你通过Python 3.6及以上版本进行编程。一个重要的API设计是返回合适的响应状态码,这可以使得客户端理解服务端的处理结果。本教程将向你展示如何在FastAPI中使用和自定义响应状态码。

状态码概览

HTTP状态码是服务器用来告知客户端关于请求的处理情况的3位数字代码。这些状态码分为五个类别:

  • 1xx (信息): 请求已被接受,继续处理。
  • 2xx (成功): 请求已成功被服务器接收、理解、并接受。
  • 3xx (重定向): 需要后续操作才能完成这一请求。
  • 4xx (客户端错误): 请求包含语法错误或无法被执行。
  • 5xx (服务器错误): 服务器在处理请求的时候发生了错误。

FastAPI中设置响应状态码

FastAPI 允许在路径操作中设置响应状态码。以下是一些基本示例。

设置默认响应状态码

你可以为路径操作设置默认的响应状态码,如下:

from fastapi import FastAPI, statusapp = FastAPI()@app.post("/items/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):return {"name": name}

在上述示例中,当你向 /items/ 端点发送 POST 请求时,无论何时,只要没有异常,它都会返回 201 Created 状态码。

使用响应参数设置状态码

也可以在函数内部动态设置状态码,通过 Response 对象的 status_code 属性:

from fastapi import FastAPI, Response, statusapp = FastAPI()@app.post("/items/")
async def create_item(name: str, response: Response):response.status_code = status.HTTP_202_ACCEPTEDreturn {"name": name}

在这个例子中,我们将响应状态码设置为 202 Accepted
测试结果
在这里插入图片描述

使用HTTPException定义错误状态码

你可能需要通知客户端错误发生,比如用户请求一个不存在的项。在FastAPI中,你可以通过抛出 HTTPException 来实现。

from fastapi import FastAPI, HTTPException, statusapp = FastAPI()fake_db = {"foo": "bar"}@app.get("/items/{item_id}")
async def read_item(item_id: str):if item_id not in fake_db:raise HTTPException(status_code=404, detail="Item not found")return {"item": fake_db[item_id]}

在这个例子中,如果请求的 item_id 不存在于数据库中,我们抛出一个 HTTPException,状态码为 404 Not Found
测试结果:
在这里插入图片描述

结论

使用合适的响应状态码是API设计的一个重要方面,它可以提升API的可用性并且帮助客户端理解请求的处理情况。FastAPI提供了简单直观的方式来设置和自定义响应状态码。通过本教程的示例,你现在应该能够在你的API中有效管理响应状态码了。

注意:务必记住,正确使用状态码可以帮助客户端更好地处理不同情况,改善用户体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推出 Amazon EC2 C7i 实例

亚马逊云科技宣布全面推出由定制的第 4 代英特尔至强可扩展处理器(代号为 Sapphire Rapids)提供支持的 Amazon Elastic Compute Cloud (Amazon EC2) C7i 实例。这些定制处理器仅在亚马逊云科技上可用,与其他云提供商使用的基于 x86 的同类英特…

Kafka事务是怎么实现的?Kafka事务消息原理详解

目录 一、Kafka事务性消息1.1 介绍Kafka事务性消息1.2 事务性消息的应用场景1.3 Kafka事务性消息的优势 二、Kafka事务性消息的使用2.1 配置Kafka以支持事务性消息生产者配置消费者配置 2.2 生产者:发送事务性消息创建Kafka生产者开始事务发送消息提交或中止事务 2.…

logstash之grok插件自定义规则学习

文章目录 1、前言2、Grok提供的常用Patterns说明及举例2.1 常用的表达式说明 3、使用grok插件进行日志字段处理4、案例1:处理nginx的日志4.1、查看nginx日志格式4.2、对nginx的日志进行过滤处理 5、案例2:处理tomcat的日志5.1、[安装logstash-filter-mul…

外包干了3个月,技术退步明显.......

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【MySQL】在 Centos7 环境下安装 MySQL

环境搭建 一、检查环境二、检查系统安装包三、安装 mysql yum 源四、安装 mysql 服务五、启动服务六、登录 mysql七、配置 my.cnf 注意,我们搭建的 mysql 环境是在 Linux 的 Centos7 环境下安装的~ 一、检查环境 注意,我们在安装和卸载中,先…

pytorch 中 drop_last与 nn.Parameter

1. drop_last 在使用深度学习,pytorch 的DataLoader 中, from torch.utils.data import DataLoader# Define your dataset and other necessary configurations # Create DataLoader train_loader DataLoader(dataset, batch_sizebatch_size, drop_la…

vue项目列表跳转详情返回列表页保留搜索条件

需求 列表进入详情后,返回详情的时候保留搜索的条件,第几页进入的返回还在第几页 1.在详情页设置定义一个字段 mounted() {sessionStorage.setItem("msgInfo", true);},2.在获取列表数据的时候在mounted里面判断定义的字段 if (sessionStor…

【EI会议征稿】第二届纯数学、应用数学与计算数学国际学术会议(PACM 2024)

第二届纯数学、应用数学与计算数学国际学术会议(PACM 2024) 2024 2nd International Cnference on Pure, Applied and Computational Mathematics (PACM 2024) 第二届纯数学、应用数学计算数学国际学术会议 (PACM2024) 将于2024年1月19-21日在中国厦门隆…

报错:AttributeError: ‘DataFrame‘ object has no attribute ‘reshape‘

这个错误通常发生在你试图在 Pandas DataFrame 上直接使用 reshape 方法时。reshape 方法通常与 NumPy 数组相关联,而不是 Pandas DataFrame。 如果你正在使用 Pandas DataFrame 并希望重新塑造它,你应该使用 Pandas 的重塑函数,如 pivot、m…

linux常用命令大全50个Linux常用命令

Linux有许多常用的命令,这些命令可以用来管理文件、运行程序、查看系统状态等。以下是一些常用的Linux命令: pwd:显示当前所在的工作目录的全路径名称。cd:用于更改当前工作目录,例如,若要进入Documents目…

UE5 树叶飘落 学习笔记

一个Plane是由两个三角形构成的,所以World Position Offset,只会从中间这条线折叠 所有材质 这里前几篇博客有说这种逻辑,就是做一个对称的渐变数值 这里用粒子的A值来做树叶折叠的程度,当然你也可以用Dynamic Param 这样就可以让…

Android 11.0 长按按键切换SIM卡默认移动数据

Android 11.0 长按按键切换SIM卡默认移动数据 近来收到客户需求想要通过长按按键实现切换SIM卡默认移动数据的功能,该功能主要通过长按按键发送广播来实现,具体修改参照如下: 首先创建广播,具体修改参照如下: /vend…

麒麟KYLINOS上删除多余有线连接

原文链接:麒麟KYLINOS上删除多余网络有线连接 hello,大家好啊,今天我要给大家介绍的是在麒麟KYLINOS操作系统中,如何删除通过Parallels Desktop虚拟机安装时产生的多余有线连接。在使用Parallels Desktop虚拟机安装麒麟桌面操作系…

C/C++ 题目:给定字符串s1和s2,判断s1是否是s2的子序列

判断子序列一个字符串是否是另一个字符串的子序列 解释:字符串的一个子序列是原始字符串删除一些(也可以不删除)字符,不改变剩余字符相对位置形成的新字符串。 如,"ace"是"abcde"的一个子序…

服务器数据恢复—raid5少盘状态下新建raid5如何恢复原raid5数据?

服务器数据恢复环境: 一台服务器上搭建了一组由5块硬盘组建的raid5阵列,服务器上层存放单位重要数据,无备份文件。 服务器故障&分析: 服务器上raid5有一块硬盘掉线,外聘运维人员在没有了解服务器具体情况下&#x…

如何在linux中使用rpm管理软件

本章主要介绍使用rpm对软件包进行管理。 使用rpm查询软件的信息 使用rpm安装及卸载软件 使用rpm对软件进行更新 使用rpm对软件进行验证 rpm 全称是redhat package manager,后来改成rpm package manager,这是根据源 码包编译出来的包。先从光盘中拷贝一…

[算法每日一练]-双指针 (保姆级教程篇 1) #A-B数对 #求和 #元音字母 #最短连续子数组 #无重复字符的最长子串 #最小子串覆盖 #方块桶

目录 A-B数对 解法一:双指针 解法二:STL二分查找 解法三:map 求和 元音字母 最短连续子数组 无重复字符的最长子串 最小子串覆盖 方块桶 双指针特点:双指针绝不回头 A-B数对 解法一:双指针 先把数列排列成…

《C++新经典设计模式》之第8章 外观模式

《C新经典设计模式》之第8章 外观模式 外观模式.cpp 外观模式.cpp #include <iostream> #include <memory> using namespace std;// 中间层角色&#xff0c;隔离接口&#xff0c;两部分模块通过中间层打交道 // 提供简单接口&#xff0c;不与底层直接打交道 // 提…

Grounding DINO、TAG2TEXT、RAM、RAM++论文解读

提示&#xff1a;Grounding DINO、TAG2TEXT、RAM、RAM论文解读 文章目录 前言一、Grounding DINO: Marrying DINO with Grounded Pre-Training for Open-Set Object Detection1、摘要2、背景3、部分文献翻译4、贡献5、模型结构解读a.模型整体结构b.特征增强结构c.解码结构 6、实…

使用Sourcetrail解析C项目

阅读源码的工具很多&#xff0c;今天给大家推荐一款别具一格的源码阅读神器。 它就是 Sourcetrail&#xff0c;一个免费开源、跨平台的可视化源码探索项目 使用