众所周知,因客户端或调用方的原因导致出错的,返回的状态码是以 4 开头的 (400~499) 比如常见的 404 Not Found, 资源不存在......为了直观友好的给客户端返回错误, 在 FastApi 中一般使用 HTTPException from fastapi import FastAPI, HTTPException app = FastAPI...,可以选择用 raise 将异常抛出去 抛出异常,便立即会结束本次请求,并将HTTP错误从HTTPException发送到客户端或浏览器 比如:在浏览器中输入 http://127.0.0.1:8000...自定义异常类 和 starlette 源码中处理异常一样,你也可以自定义一个异常处理类 定义的异常处理类,使用@app.exception_handler() 支持在 FastAPI 中全局使用该异常类...,并事先定义好状态码 418 的提示错误 重写默认异常类 FastAPI 有许多的默认异常处理类 这些处理程序负责在引发 HTTPException 和请求包含无效数据时返回默认 JSON 响应 比如下面的路由是只支持
串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。...图1 串行通信与并行通信 二、串口通讯模式 串口通讯模式包括单工、半双工和全双工,其中单工模式数据传输只支持数据在一个方向上传输。...半双工模式允许数据在两个方向上传输,但某一时刻只允许数据在一个方向上传输,实际上是一种切换方向的单工通信,不需要独立的接收端和发送端,两者可合并为一个端口。...我们知道串口通信的数据传输都是0和1,在单总线、I2C、UART中都是通过一根线的高低电平来判断逻辑1或者逻辑0,但这种信号线的GND再与其他设备形成共地模式的通信,这种共地模式传输容易产生干扰,并且抗干扰性能也比较弱...图10 RS-422全双工(点对点)接线方式 六、RS485简介 RS-485的电气特性与RS-422基本一样。它采用半双工通讯方式,有2根信号线,在半双工模式下工作,常用于总线网。
使用 RequestValidationError 的请求体 9. 复用 FastAPI 异常处理器 10....,适用于小型文件 很多情况下,UploadFile 更好用 1.存储在内存里的文件超出上限,FastAPI 会将其存入磁盘,大型文件不会用尽所有内存 2.可获取上传文件的元数据 3.自带 file-like...async 接口 在 async 路径操作函数 内,要用以下方式读取文件内容: contents = await myfile.read() 在普通 def 路径操作函数 内,则可以直接访问 UploadFile.file...使用 RequestValidationError 的请求体 RequestValidationError 包含其接收到的 无效数据请求的 body 。...复用 FastAPI 异常处理器 在自定义处理完异常之后,还可以继续使用 默认的异常处理器 from fastapi import FastAPI, HTTPException from fastapi.exception_handlers
在本地运行的AI演示项目效果惊人,那么如何将它变成一个功能完备、可供他人使用的应用程序?这是许多开发者从原型走向产品的关键一步。...1.专为AI后端而生的轻量化之道许多人可能认为掌握一个强大的后端框架需要陡峭的学习曲线,但FastAPI彻底颠覆了这一观念,尤其是在构建AI后端时。...FastAPI的简洁性让这个封装层能够“隐身”,使开发者能将绝大部分精力聚焦在真正的核心——AI逻辑上。...你只需定义一个继承自PydanticBaseModel的类来创建数据模式(schema),FastAPI便会在请求进入你的业务逻辑之前,自动用此模式验证所有传入数据。...将一个同步的FastAPI端点转换为异步模式,操作“非常简单”(supersimple)。你只需将端点函数定义从def改为asyncdef,并在处理IO密集型任务时使用await关键字即可。
前置阅读推荐:如果你还不了解Claude Code子代理的基础概念,强烈建议先阅读我的上一篇文章《Claude Code子代理完全指南:从0到1构建你的AI编程军团》,它会帮你理解子代理的核心机制和配置方法...今天要分享的是我打磨了数月的Python开发子代理——这个配置能让Claude Code像一个拥有10年经验的Python架构师一样编写代码,从Web开发到数据处理,从自动化脚本到机器学习,无所不能。...但实际上: 初学者写Python:像在写C语言 一般开发者写Python:像在写Java Python专家写Python:真正的Pythonic Python子代理帮你直接达到专家水平。...专精Django/FastAPI Web开发、数据处理和自动化。在Python项目和性能优化时主动使用。...:清晰的结构,完善的文档 记住:Python的座右铭是"优雅、明确、简单"。
在工业自动化、智能设备互联等场景中,RS232、RS422、RS485 是应用最广泛的三大串口通信标准,支撑着传感器、PLC、仪表等设备的数据传输。...但三者在传输距离、抗干扰能力、节点数量等核心性能上差异显著,直接决定了其使用场景的局限性 ——RS232 传输距离短、抗干扰弱,RS422/485 虽提升明显,却仍受限于有线电缆的信号衰减与电磁干扰。...RS422:平衡传输的点对点 / 星型组网方案采用差分信号传输(TX+/TX-、RX+/RX-),通过两根信号线的电压差传递数据,抗干扰能力较 RS232 提升 10 倍以上。...支持 1 主 10 从的星型拓扑,可实现一台主设备控制多台从设备,但 4 线制接线需区分发送与接收线,布线复杂度较高,适合车间内中等距离的设备集群通信。...即插即用部署,零门槛运维无需专业编程与光纤技术知识,即可快速完成组网:免配置设计:上电即工作,无需安装驱动或编写程序,仅需通过拨码开关选择串口类型(RS232/485/422)与光纤模式(单纤 / 双纤
总结:从某种意义上,可以说,线路上存在的仅仅是电流,RS232/RS485规定了这些电流在什么样的线路上流动和流动的形式;在UART那里,电流才被解释和组装成数据,并变成CPU可直接读写的形式。...RS422简介 ①RS-422标准全称是“平衡电压数字接口电路的电气特性”,它定义了接口电路的特性。实际上还有一根信号地线,共5根线。...②电气特性:RS422的电气特性与RS485完全一样。主要区别:RS422有4根信号线:两根发送(TXD+、TXD-)、两根接收(RXD+、RXD-)。...由于RS-422的收与发是分开的所以可以同时接收和发送(全双工)。 RS232/RS485/RS422三者间的区别 1、RS232是全双工的,RS485是半双工的,RS422是全双工的。...2、RS485与RS232仅仅是通讯的物理协议(即接口标准)有区别,RS485是差分传输方式,RS232是单端传输方式,但通讯程序没有太多的差别。
(2)RS-422 有4 根信号线:两根发送(Y、Z)、两根接收(A、B)。由于RS-422 的收与发是分开的,所以可以同时收和发(全双工)。...很多人往往都误认为RS-422串行接口是RS-485串行接口的全双工版本,实际上,它们在电器特性上存在着不少差异,共模电压范围和接收器输入电阻不同使得该两个标准适用于不同的应用领域。...尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。...通信使用3根线完成:(1)地线,(2)发送,(3)接收。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接收数据。其他线用于握手,但是不是必须的。...如果CTS模式使能,LabWindows使用如下规则:当PC发送数据:RS-232库必须检测CTS线高后才能发送数据。
引言 在现代 Web 开发领域,用户对接口响应速度、系统并发能力的要求日益严苛,性能已经成为衡量 Web 框架优劣的核心指标之一。...同时,开发者也越来越关注开发效率——减少重复的文档编写、数据验证代码,让精力聚焦在业务逻辑上。...Pydantic 优化:数据验证基于 Pydantic 实现,底层使用 Rust 重写的核心逻辑,验证速度远超传统 Python 手动校验。...核心概念详解 异步编程:释放 IO 密集型任务的性能 核心原理 FastAPI 支持异步函数(async def),在处理需要等待外部资源(如数据库、API 调用)的任务时,线程不会阻塞,而是去处理其他请求...会自动返回 422 错误,并清晰提示验证失败的原因,无需手动处理。
查询路径参数和参数校验 关于查询参数,其实就是在使用POSTMAN 提交的时候的参数信息: 如: http://127.0.0.1:8000/items/?...我们发现,它返回的是list所有数据。这是为什么呢?来,我来细细品一下代码。...提示错误信息,值不是整形,HTTP状态码为:422 多路径和查询参数 所谓的多路径和查询参数就是URL上包含了有动态的参数,还有需要通过&分隔符提交的参数,这情况,通常再GET提交的中也很常见,那么如何处理呐...还可以定义可选参数和必选的参数的提交类型: 其中还可以使用Optional来定义需要提交的数据类型: 如: import uvicorn from fastapi import FastAPI from...查询参数Query参数的其他校验 在以前通常是使用wtform来定义提交的字段信息的类似或可选或长度类型。
大学的时候参加ACM/ICPC一直使用的是C语言,实习的时候做一个算法策略后台用的是php,毕业后做策略算法开发,因为要用spark,所以写了scala,后来用基于storm开发实时策略,用的java。...在 API 路由中,我们使用了这个依赖项,确保只有通过鉴权的请求才能访问到 AI 服务。...同时,我们定义了请求和响应的模型,以确保数据的正确性和一致性 2.1.2 如何理解api_key: str = Depends(authenticate) 在 FastAPI 中,Depends 函数用于定义依赖项...这样,你就可以在路由处理函数中使用 api_key 参数,而不需要担心鉴权逻辑。FastAPI 会自动处理鉴权,并确保只有通过鉴权的请求才能访问到你的 API。...如果请求头中没有 Authorization 字段,或者这个字段的值不符合预期,FastAPI 将抛出一个 HTTP 422 Unprocessable Entity 异常。
环境下运行脚本 运行成功,在AI知识库前端应用上面添加向量模型的时候,发现请求错误 404错误,说明脚本使用方式可能不对 换一种方式,使用openai风格的形式来实现,先安装一些依赖包 pip install...,发现遇到新的错误: 经过分析,错误原因是某知识库工具在调用嵌入模型前对文本进行了分词(Tokenization)并传递了Token ID列表,而非原始文本。...看到文档信息以及被向量化的数据流 以上向量处理虽然能成功,但是偶尔还是会发生向量化中途失败的情况,可能是服务不够完善。...,更新有关配置,在服务端可以监测到知识库前端进行连接请求时候发送的消息。...以上内容使用m3e-large模型进行演示,在最后的代码里面,取代了最开始下载到本地的做法,直接改为根据模型名称自动下载最新指定模型的做法,可以将m3e模型换成其他更加主流的模型进行体验。
前言 接口传参方式之一:通过发送请求体(Request Body)来传递请求数据 在 FastAPI,提倡使用 Pydantic 模型来定义请求体 这篇文章会详细讲不使用 Pydantic 和 使用 Pydantic...发送请求体的栗子 注意 请求体并不是只有 POST 请求有,只不过 POST 更常见 在 PUT、DELETE、PATCH 请求中都可以使用请求体 其实,在 GET 请求中也可以用请求体,不过仅适用于非常极端的情况下...声明为 Dict[str, float],FastAPI 会对每一个键值对都做数据校验,校验失败会有友好的错误提示 正确传参的请求结果 校验失败的请求结果 友好的错误提示啊~ 使用 Pydantic...JSON 字符串 将字段值转换相应的类型(若有需要) 验证数据,如果验证失败,会返回一个清晰的错误,准确指出错误数据的位置和信息 item 会接收到完整的请求体数据,拥有所有属性及其类型,IDE 也会给予对应的智能提示...给 Pydantic 模型自动的生成 JSON Schema,这些 Schema 会成为生成 OpenAPI Schema 的一部分,并显示在接口文档上 正确传参的请求结果 正常传参,所有属性按指定的类型进行传数据
一、枚举的进化轨迹1.1 原始时代的硬编码早期Python项目用全局变量模拟枚举:# 状态定义散落在代码各处IDLE = 0RUNNING = 1JUMPING = 2 # 使用时容易出错if player.state...IntEnum的典型模式:from fastapi import FastAPI, Responsefrom enum import IntEnum class ApiStatus(IntEnum):...SUCCESS = 200 VALIDATION_ERROR = 422 INTERNAL_ERROR = 500 app = FastAPI() @app.post("/items")async...在游戏开发中,IntEnum可以精准控制角色状态机;在微服务架构里,StrEnum能确保跨系统的状态码一致;在数据分析场景,混合使用不同枚举类型可以构建更健壮的管道。...理解这些枚举类型的差异,就像厨师掌握不同刀具的用途:普通Enum是日常使用的万用刀,IntEnum是处理肉类的骨刀,StrEnum则是雕刻水果的雕花刀。
UART的串行数据传输不需要使用时钟信号来同步传输,而是依赖于发送设备和接收设备之间预定义的配置。 对于发送设备和接收设备来说,两者的串行通信配置应该设置为完全相同。...SDA线——负责在设备间传输串行数据。 该总线可以将多个I2C设备连接到该系统上。连接到I2C总线上的设备既可以用作主设备,也可以用作从设备。...RS422串口通信 RS-422有4根信号线:两根发送、两根接收和一根地线,是全双工通信。...两根数据线采用差分传输,即需要两根数据线配合才能传输一个bit,因此是半双工通信,同一时间只能发送或者接收。...嵌入式中,单片机与SD卡通信有两种模式: SPI总线通信模式 SD总线通信模式 值得注意的是,SD总线模式中有4条数据线;SPI总线模式中仅有一条数据线(MOSI和MISO不能同时读数据,也不能同时写数据
异步串行通信是指UART(Universal Asynchronous Receiver/Transmitter),通用异步接收/发送。UART是一个并行输入成为串行输出的芯片,通常集成在主板上。...RS-422 是一种单机发送、多机接收的单向、平衡传输规范,被命名为 TIA/EIA-422-A 标准。...为扩展应用范围,EIA 又于 1983 年在 RS-422 基础上制定了 RS-485 标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围...通常情况下,使用 25 根信号线中的 9 根就可以实现 RS-232 通信。...大多数串行接口电路的接收波特率和发送波特率都可以设置,但接收方的接收波特率必须与发送方的发送波特率相同。
在现代 Web 应用开发中,用户体验的优化是一个非常重要的目标,尤其是在涉及到实时数据更新的场景下。...这种方式通过 Server-Sent Events (SSE) 技术实现,带来了独特的用户体验。 什么是流式模式? 流式模式,顾名思义,即通过流的方式持续发送数据而不是一次性全部返回。...与传统的 HTTP 请求模式不同,流式模式的特点在于服务器可以在连接打开后持续地向客户端发送数据。这种实时传输方式不仅可以加快数据的响应速度,还可以减少带宽占用,使得应用的运行更加流畅。...SSE 是一种在 Web 页面中从服务器向客户端推送实时更新的技术,属于 HTML5 标准之一。它允许服务器不断发送数据到客户端,而不需要客户端持续发起请求。...服务端的实现 我们假设服务器使用 FastAPI 框架,以下是一个简单的服务端代码示例: from fastapi import FastAPI from fastapi.responses import
一、概述 HTTPException异常抛出 再之前Bottle 中其实有一个就是HttpError异常类,在FastAPI也存在这么一个HTTPException。...__init__(status_code=status_code, detail=detail) self.headers = headers 所以我们对于异常通常可以直接的使用 raise...覆盖FastAPI默认的异常处理 按官方文档说明就是,当请求包含无效的数据的时候,或参数提交异常错误的时候,会抛出RequestValidationError, 那其实我也可以通过上面的自定义异常的方式来覆盖重写我们的...RequestValidationError所返回信息: 如: 默认代码没有添加覆盖处理的话: 发生异常的时候是提示是: import uvicorn from fastapi import FastAPI...可以发现状态码是指定的422,返回信息也是指定的。 本文参考链接: http://www.zyiz.net/tech/detail-119883.html
扩展:DTU 模块接收的MQTT信息转发到485/422输出 485/422接收的数据转发给MQTT发送 设备订阅的主题:user/设备的imei号码 设备发布的主题:device/设备的imei号码...#msgQueue > 0 end --- MQTT客户端数据发送处理 -- @param mqttClient,MQTT客户端对象 -- @return 处理成功返回true,处理出错返回false...串口的数据读完后清空缓冲区 end) 扩展1:DTU 测试 1.下载本节程序 2.接上485/422模块 A+,A- 作为485通信时的接收和发送数据接口,另作为422通信时的发送数据接口 B+,B-...作为422通信时的接收数据接口 用485模块连接如下: ?...3.打开MQTT调试助手 提示:设备的IMEI可看自己模块上的 ? 订阅的主题: device/设备的imei号 发布的主题: user/设备的imei号 ? 4.MQTT助手发布消息 ?
为了减小部署与计算开销,GLM-4V-9B没有引入额外的视觉专家模块,采用了直接混合文本和图片数据的方式进行训练,在保持文本性能的同时提升多模态能力,模型架构如图: 2.3 GLM-4V 模型结构 通过之前的文章中讲述的使用...可以使用uvicorn运行这个应用,它是一个ASGI服务器,FastAPI是基于ASGI构建的 3.1.2 uvicorn uvicorn是一个ASGI(Asynchronous Server Gateway...以下是如何使用uvicorn运行一个FastAPI应用的步骤: 假设你有一个名为main.py的文件,其中包含你的FastAPI应用: from fastapi import FastAPI app...--reload标志告诉uvicorn在代码更改时自动重新加载应用,这对于开发非常有用。 3.1.3 pydantic Pydantic是一个Python库,用于数据验证和设置管理。...它允许你发送各种类型的HTTP请求,如GET、POST、PUT、DELETE等,以及处理响应。requests库的一个主要优点是它的易用性和简洁的API。