当前位置: 首页 > news >正文

FastAPI 响应状态码:管理和自定义 HTTP Status Code

FastAPI 响应状态码:管理和自定义 HTTP Status Code

本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码,涵盖了常见的 HTTP 状态码分类,如信息响应(1xx)、成功状态(2xx)、客户端错误(4xx)和服务器错误(5xx)。通过 status_code 参数和 fastapi.status 常量简化开发,并提供了如何根据业务需求动态调整状态码的方法。此外,还介绍了如何通过 Response 参数在路径操作函数内部修改响应状态码,以实现更精确的控制和更好的客户端交互体验。

文章目录

  • FastAPI 响应状态码:管理和自定义 HTTP Status Code
      • 一 声明 HTTP 状态码
      • 二 HTTP 协议状态码
      • 三 使用 `fastapi.status` 中的变量
      • 四 使用 `Response` 参数更改状态码
      • 五 完整代码示例
      • 六 源码地址
      • 七 参考

在 FastAPI 中,正确设置和管理 HTTP 状态码对于API的准确性和响应性至关重要。

一 声明 HTTP 状态码

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

status_code 参数属于装饰器中的参数,而非 路径操作函数 的参数。它接收一个表示 HTTP 状态码的数字,或支持 IntEnum 类型,例如 Python 的 http.HTTPStatus。运行代码文件 chapter17.py 来启动应用:

$ uvicorn chapter17:app --reload

在 SwaggerUI 中可以查看在线文档:http://127.0.0.1:8000/docs 。在文档中会code会有显示:
在这里插入图片描述

二 HTTP 协议状态码

在 HTTP 协议中,状态码是响应的一部分,通常由三位数字组成,并有便于识别的名称,但关键仍是数字。常用状态码如下:

  • 1xx(信息):返回信息,通常不包含响应体,使用较少。

  • 2xx

    (成功):表示请求成功,是最常用的状态码。

    • 200:成功,默认状态码,表示一切正常。
    • 201:已创建,通常在创建新资源时使用。
    • 204:无内容,表示没有响应体。
  • 3xx

    (重定向):表示重定向请求,响应不一定包含内容。

    • 304:未修改,表示资源未改变,不返回响应体。
  • 4xx

    (客户端错误):表示请求有误。

    • 400:一般客户端错误。
    • 404:未找到资源。
  • 5xx(服务器错误):表示服务器问题,通常由服务器或应用错误引发,极少直接使用。

详解见 Web HTTP Status 。

在这里插入图片描述

在开发应用软件时,有时会自定义非标准响应码,这些响应码与标准的 HTTP 响应码不同。

三 使用 fastapi.status 中的变量

@app.post("/items01/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):return {"name": name}

可以使用 fastapi.status 中预定义的变量,或通过 from starlette import status 导入。为了简化开发,FastAPI 提供了与 starlette.status 相同的 fastapi.status,该变量直接来源于 Starlette。以下是已定义的 HTTP status code 变量:

HTTP_100_CONTINUE = 100
HTTP_101_SWITCHING_PROTOCOLS = 101
HTTP_102_PROCESSING = 102
HTTP_103_EARLY_HINTS = 103
HTTP_200_OK = 200
HTTP_201_CREATED = 201
HTTP_202_ACCEPTED = 202
HTTP_203_NON_AUTHORITATIVE_INFORMATION = 203
HTTP_204_NO_CONTENT = 204
HTTP_205_RESET_CONTENT = 205
HTTP_206_PARTIAL_CONTENT = 206
HTTP_207_MULTI_STATUS = 207
HTTP_208_ALREADY_REPORTED = 208
HTTP_226_IM_USED = 226
HTTP_300_MULTIPLE_CHOICES = 300
HTTP_301_MOVED_PERMANENTLY = 301
HTTP_302_FOUND = 302
HTTP_303_SEE_OTHER = 303
HTTP_304_NOT_MODIFIED = 304
HTTP_305_USE_PROXY = 305
HTTP_306_RESERVED = 306
HTTP_307_TEMPORARY_REDIRECT = 307
HTTP_308_PERMANENT_REDIRECT = 308
HTTP_400_BAD_REQUEST = 400
HTTP_401_UNAUTHORIZED = 401
HTTP_402_PAYMENT_REQUIRED = 402
HTTP_403_FORBIDDEN = 403
HTTP_404_NOT_FOUND = 404
HTTP_405_METHOD_NOT_ALLOWED = 405
HTTP_406_NOT_ACCEPTABLE = 406
HTTP_407_PROXY_AUTHENTICATION_REQUIRED = 407
HTTP_408_REQUEST_TIMEOUT = 408
HTTP_409_CONFLICT = 409
HTTP_410_GONE = 410
HTTP_411_LENGTH_REQUIRED = 411
HTTP_412_PRECONDITION_FAILED = 412
HTTP_413_REQUEST_ENTITY_TOO_LARGE = 413
HTTP_414_REQUEST_URI_TOO_LONG = 414
HTTP_415_UNSUPPORTED_MEDIA_TYPE = 415
HTTP_416_REQUESTED_RANGE_NOT_SATISFIABLE = 416
HTTP_417_EXPECTATION_FAILED = 417
HTTP_418_IM_A_TEAPOT = 418
HTTP_421_MISDIRECTED_REQUEST = 421
HTTP_422_UNPROCESSABLE_ENTITY = 422
HTTP_423_LOCKED = 423
HTTP_424_FAILED_DEPENDENCY = 424
HTTP_425_TOO_EARLY = 425
HTTP_426_UPGRADE_REQUIRED = 426
HTTP_428_PRECONDITION_REQUIRED = 428
HTTP_429_TOO_MANY_REQUESTS = 429
HTTP_431_REQUEST_HEADER_FIELDS_TOO_LARGE = 431
HTTP_451_UNAVAILABLE_FOR_LEGAL_REASONS = 451
HTTP_500_INTERNAL_SERVER_ERROR = 500
HTTP_501_NOT_IMPLEMENTED = 501
HTTP_502_BAD_GATEWAY = 502
HTTP_503_SERVICE_UNAVAILABLE = 503
HTTP_504_GATEWAY_TIMEOUT = 504
HTTP_505_HTTP_VERSION_NOT_SUPPORTED = 505
HTTP_506_VARIANT_ALSO_NEGOTIATES = 506
HTTP_507_INSUFFICIENT_STORAGE = 507
HTTP_508_LOOP_DETECTED = 508
HTTP_510_NOT_EXTENDED = 510
HTTP_511_NETWORK_AUTHENTICATION_REQUIRED = 511

四 使用 Response 参数更改状态码

@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):if task_id not in tasks:tasks[task_id] = "This didn't exist before"response.status_code = status.HTTP_201_CREATEDreturn tasks[task_id]

路径操作函数中声明一个 Response 类型的参数,根据业务逻辑修改状态码 response.status_code = status.HTTP_201_CREATED

五 完整代码示例

from fastapi import FastAPI, status, Responseapp = FastAPI()@app.post("/items/", status_code=201)
async def create_item(name: str):return {"name": name}@app.post("/items01/", status_code=status.HTTP_201_CREATED)
async def create_item(name: str):return {"name": name}tasks = {"foo": "Listen to the Bar Fighters"}@app.put("/get-or-create-task/{task_id}", status_code=200)
def get_or_create_task(task_id: str, response: Response):if task_id not in tasks:tasks[task_id] = "This didn't exist before"response.status_code = status.HTTP_201_CREATEDreturn tasks[task_id]

六 源码地址

详情见:GitHub FastApiProj

七 参考

[1] FastAPI 文档

相关文章:

FastAPI 响应状态码:管理和自定义 HTTP Status Code

FastAPI 响应状态码:管理和自定义 HTTP Status Code 本文介绍了如何在 FastAPI 中声明、使用和修改 HTTP 状态码,涵盖了常见的 HTTP 状态码分类,如信息响应(1xx)、成功状态(2xx)、客户端错误&a…...

【人工智能数学基础篇】线性代数基础学习:深入解读矩阵及其运算

矩阵及其运算:人工智能入门数学基础的深入解读 引言 线性代数是人工智能(AI)和机器学习的数学基础,而矩阵作为其核心概念之一,承担着数据表示、变换和运算的重任。矩阵不仅在数据科学中广泛应用,更是神经网…...

RNACOS:用Rust实现的Nacos服务

RNACOS是一个使用Rust语言开发的Nacos服务实现,它继承了Nacos的所有核心功能,并在此基础上进行了优化和改进。作为一个轻量级、快速、稳定且高性能的服务,RNACOS不仅包含了注册中心、配置中心和Web管理控制台的功能,还支持单机和集…...

JAVA |日常开发中JSTL标签库详解

JAVA &#xff5c;日常开发中JSTL标签库详解 前言一、JSTL 概述1.1 定义1.2 优势 二、JSTL 核心标签库2.1 导入 JSTL 库2.2 <c:out>标签 - 输出数据2.3 <c:if>标签 - 条件判断2.4 <c:choose>、<c:when>和<c:otherwise>标签 - 多条件选择 结束语优…...

Apache HttpClient 4和5访问没有有效证书的HTTPS

本文将展示如何配置Apache HttpClient 4和5以支持“接受所有”SSL。 目标很简单——访问没有有效证书的HTTPS URL。 SSLPeerUnverifiedException 在未配置SSL的情况下&#xff0c;尝试消费一个HTTPS URL时会遇到以下测试失败&#xff1a; Test void whenHttpsUrlIsConsumed…...

Lighthouse(灯塔)—— Chrome 浏览器性能测试工具

1.认识 Lighthouse Lighthouse 是 Google 开发的一款开源性能测试工具&#xff0c;用于分析网页或 Web 应用的性能、可访问性、最佳实践、安全性以及 SEO 等关键指标。开发人员可以通过 Lighthouse 快速了解网页的性能瓶颈&#xff0c;并基于优化建议进行改进。 核心功能&…...

扫二维码进小程序的指定页面

草料二维码解码器 微信开发者工具 获取二维码解码的参数->是否登陆->跳转 options.q onLoad: function (options) {// console.log("options",options.q)if (options && options.q) {// 解码二维码携带的链接信息let qrUrl decodeURIComponent(optio…...

如何用IntelliJ IDEA开发Android Studio用自定义Gradle插件

博主所用软件版本为&#xff1a; IntelliJ IDEA 2024.1.4 (Community Edition) Android Studio Ladybug Feature Drop | 2024.2.2 Beta 1 1、制作gradle插件&#xff08;IntelliJ IDEA 2024.1.4&#xff09; 新建groovy工程&#xff0c;File–>New–>Project… 右键点…...

YOLOv8实战道路裂缝缺陷识别

本文采用YOLOv8作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv8以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对道路裂缝数据集进行训练和优化&#xff0c;该数据集包含丰富的道路裂缝图像样本…...

RPC一分钟

概述 微服务治理&#xff1a;Springcloud、Dubbo服务通信&#xff1a;Grpc、Trift Dubbo 参考 Dubbo核心功能&#xff0c;主要提供了&#xff1a;远程方法调用、智能容错和负载均衡、提供服务自动注册、自动发现等高效服务治理功能。 Dubbo协议Dubbo支持dubbo、rmi、http、…...

Elasticsearch ILM 故障排除:常见问题及修复

作者&#xff1a;来自 Elastic Stef Nestor 大家好&#xff01;我们的 Elasticsearch 团队正在不断改进我们的索引生命周期管理 (index Lifecycle Management - ILM) 功能。当我第一次加入 Elastic Support 时&#xff0c;我通过我们的使用 ILM 实现自动滚动教程快速上手。在帮…...

Unity 设计模式-策略模式(Strategy Pattern)详解

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;定义了一系列算法&#xff0c;并将每种算法封装到独立的类中&#xff0c;使得它们可以互相替换。策略模式让算法可以在不影响客户端的情况下独立变化&#xff0c;客户端通过与这些策略对象进…...

【Maven系列】深入解析 Maven 常用命令

前言 在当今的软件开发过程中&#xff0c;项目管理是至关重要的一环。项目管理包括了项目构建、依赖管理以及发布部署等诸多方面。而在Java生态系统中&#xff0c;Maven已经成为了最受欢迎的项目管理工具之一。Maven 是一套用于构建、依赖管理和项目管理的工具&#xff0c;主要…...

微信小程序之简单的数据中心管理平台(1)

微信小程序之简单的数据中心管理平台&#xff08;1&#xff09; 引言 随着微信小程序的广泛应用&#xff0c;越来越多的企业开始探索如何利用这一技术开发高效、便捷的管理平台。数据中心管理作为信息化建设的重要组成部分&#xff0c;需要一个灵活、可扩展的界面来实现资源的…...

sqlmap --os-shell的原理(MySQL,MSSQL,PostgreSQL,Oracle,SQLite)

1. MySQL 条件 数据库用户需要具备高权限&#xff08;如 FILE 权限&#xff09;。数据库服务运行用户需要对目标目录有写权限。Web 服务器有可写目录&#xff0c;且支持执行上传的脚本&#xff08;如 PHP、JSP 等&#xff09;。 原理 利用 MySQL 的 SELECT ... INTO OUTFIL…...

2024年认证杯SPSSPRO杯数学建模C题(第一阶段)云中的海盐解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现&#xff1a; 巴黎气候协定提出的目标是&#xff1a;在2100年前&#xff0c;把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平&#xff0c;并为1.5摄氏度而努力。但事实上&#xff0c;许多之前的…...

三维扫描检测在汽车制造中的应用

三维扫描&#xff0c;通过先进三维扫描技术获取产品和物体的形面三维数据&#xff0c;建立实物的三维图档&#xff0c;满足各种实物3D模型数据获取、三维数字化展示、3D多媒体开发、三维数字化存档、逆向设计、产品开发、直接3D打印制造或辅助加工制造等一系列的应用。 三维扫描…...

【NoSQL数据库】Hbase基本操作——数据库表的增删改查

目录 一、Hbase原理 二、HBase数据库操作 三、遇到的问题和解决方法 一、Hbase原理 HBase的数据模型&#xff1a; 行键 时间戳 列族&#xff1a;contents 列族&#xff1a;anchor 列族&#xff1a;mime “com.cnn.www” T9 Achor:cnnsi.com”CNN” T8 Achor:…...

【C++】格式化输出详解:掌握 cout 的进阶用法

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;格式化输出的理论概述&#x1f4af;控制输出宽度和填充字符setw 操作符setfill 操作符 &#x1f4af;控制浮点数的显示格式fixed 与 scientificsetprecision &#x1f4af;…...

设计模式学习思路二

设计模式的学习思路_设计模式必须按顺序进行吗-CSDN博客 以下是一些方法和思路可以帮助你更清晰地识别使用了哪种设计模式。 1. 确定模式时的思考步骤 以下是分析代码时&#xff0c;你可以遵循的一些思路和步骤&#xff0c;帮助你识别可能使用的设计模式&#xff1a; a. 识别…...

协议解析CPU飙升85%?从Wireshark抓包到JFR火焰图的全链路诊断闭环,立即生效!

第一章&#xff1a;协议解析CPU飙升85%&#xff1f;从Wireshark抓包到JFR火焰图的全链路诊断闭环&#xff0c;立即生效&#xff01;当线上服务突发CPU使用率飙升至85%以上&#xff0c;且无明显GC压力或线程阻塞时&#xff0c;协议层异常解析往往是隐藏元凶。我们曾在线上Java服…...

PDF-Extract-Kit-1.0效果展示:高精度表格识别与公式还原真实案例集

PDF-Extract-Kit-1.0效果展示&#xff1a;高精度表格识别与公式还原真实案例集 想象一下&#xff0c;你手头有一份满是复杂表格和数学公式的PDF学术论文&#xff0c;或者一份财务报告。你需要把里面的数据提取出来&#xff0c;做成Excel表格进行分析&#xff0c;或者把那些复杂…...

防晒霜真的防晒吗?揭秘SPF值背后的“光“标准

盛夏将至&#xff0c;防晒霜成为每个人的随身必备。你是否想过&#xff1a;瓶身上标注的 SPF 50、PA 是如何测出来的&#xff1f;为什么有些防晒霜涂了还是会晒黑&#xff1f;所谓的"防水防汗"真的有科学依据吗&#xff1f;这些问题的答案&#xff0c;都藏在一个精密…...

Llama-3.2V-11B-cot实战教程:集成Whisper实现音视频+图像联合推理

Llama-3.2V-11B-cot实战教程&#xff1a;集成Whisper实现音视频图像联合推理 1. 项目概述与核心能力 Llama-3.2V-11B-cot是一个强大的视觉语言模型&#xff0c;它不仅能理解图像内容&#xff0c;还能进行系统性推理。这个模型基于LLaVA-CoT论文实现&#xff0c;特别适合需要结…...

简单三步:部署Qwen3-ForcedAligner,实现音频转字幕的自动化流程

简单三步&#xff1a;部署Qwen3-ForcedAligner&#xff0c;实现音频转字幕的自动化流程 1. 工具核心价值与工作原理 1.1 为什么需要本地字幕生成工具 在视频创作和会议记录场景中&#xff0c;手动添加字幕既耗时又费力。传统在线字幕服务存在隐私泄露风险&#xff0c;且通常…...

Java程序员终于有自己的AI Agent框架了:Spring AI Alibaba上手实录

Java程序员终于有自己的AI Agent框架了&#xff1a;Spring AI Alibaba上手实录 说实话&#xff0c;作为一个写了多年Java的人&#xff0c;看着Python那边各种AI框架、Agent工具层出不穷&#xff0c;心里是有点酸的。LangChain、AutoGPT、CrewAI…全是Python的天下。Java开发者想…...

OpenClaw移动办公:Phi-3-mini-128k-instruct通过钉钉审批电子合同

OpenClaw移动办公&#xff1a;Phi-3-mini-128k-instruct通过钉钉审批电子合同 1. 为什么需要移动审批电子合同&#xff1f; 上周三我在高铁上收到法务同事的紧急消息&#xff1a;"有个供应商合同今天必须签完&#xff0c;但关键条款需要你确认"。当时手边既没电脑也…...

DTM智慧监控:构建企业级分布式事务一致性保障的终极指南

DTM智慧监控&#xff1a;构建企业级分布式事务一致性保障的终极指南 【免费下载链接】dtm A distributed transaction framework, supports workflow, saga, tcc, xa, 2-phase message, outbox patterns, supports many languages. 项目地址: https://gitcode.com/gh_mirrors…...

UNIX设计哲学:一切皆文件的原理与应用

1. UNIX 设计哲学的核心&#xff1a;"一切皆文件"在计算机操作系统的演进历程中&#xff0c;UNIX系统以其简洁而强大的设计哲学独树一帜。作为一名长期与UNIX/Linux系统打交道的开发者&#xff0c;我深刻体会到"一切皆文件"这一理念对整个计算机领域产生的…...

2026届必备的六大AI论文助手实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 此刻&#xff0c;针对学术写作情形的AI辅助网站已然构建起多元化生态&#xff0c;这类平台一…...