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

【学习篇】fastapi接口定义学习

fastapi学习链接:用户指南

1. 路径参数

在这里插入图片描述

访问fastapi接口的默认http路径为http://127.0.0.1:8000,/items为定义的接口函数read_item的路径,/{item_id}这个用大括号括起来的参数就是路径参数,接口函数可以通过引用这个路径参数名称来接收路径参数作为函数入参。

如果接口函数入参指明入参的数据类型,那么接收到的路径参数会直接按照定义的入参数据类型进行数据类型转换。

在这里插入图片描述

如果接口函数需要获取一个路径作为入参,也可以通过直接声明路径参数是path来直接写入一个路径

在这里插入图片描述

若在一个接口函数中显示的声明需要一个路径参数,即使设置函数入参取默认值也是必须在调用接口时输入路径参数的。

在这里插入图片描述

可以通过Annotated显示的定义一个入参是路径参数。

在这里插入图片描述

2. 查询参数

所有声明不为路径参数的,将自动声明为查询参数。
由于默认情况下,单数值被解释为查询参数,因此您不必显式添加

我们将强制要求,即使查询参数是必需的,其长度也不得超过 50 个字符(因为查询参数是放在路径最后面直接通过调用url方式访问接口的)。

在这里插入图片描述

http://127.0.0.1:8000/items/?skip=0&limit=10,这个url后面/?skip=0&limit=10就是查询参数,查询参数使用“?”和“&”来声明在路径最后面。

因为在接口函数read_item中事先声明了查询参数的默认取值,若函数入参取默认值,可以直接调用接口的url而不需要使用“?”和“&”来声明在路径最后面的查询参数。

在这里插入图片描述

可以声明一个查询参数是可选参数,也就是说函数的入参可以是可选的

在这里插入图片描述

函数read_item的入参q数据类型可以是str或None,并且默认的参数取值是None,这就能使q作为函数的可选参数,有无入参q可以作为函数执行不同逻辑的判断条件。

可以通过显示的声明一个接口函数的入参是查询参数,使用q: Annotated[list[str] | None, Query()] = None,声明入参q是一个查询参数,同时声明q的数据类型是list,list里面的成员数据类型是str,这要求调用的路径格式为:http://localhost:8000/items/?q=foo&q=bar

在这里插入图片描述

在这里插入图片描述

若不需要强制检查list的成员数据类型,可以仅定义入参是一个具有list数据类型的查询参数:

在这里插入图片描述

引申学习:在函数入参内可以直接通过Annotated直接定义函数入参的数据类型。

3. 请求正文Request Body

fastapi支持客户端发送请求体,但是Get定义的接口可能不能够很好的支持fastapi客户端发送请求体

在这里插入图片描述

要想在正文中声明请求体,必须使用pydantic的BaseModel模型。
FastAPI 会识别出匹配路径参数的函数参数应该从路径中获取,而被声明为 Pydantic 模型的函数参数应该从请求体中获取。

在这里插入图片描述

使用BaseModel定义请求体的参数数据类型,如果使用Pydantic PyCharm 插件可以实现自动补全请求体参数数据类型所具备的所有方法,还支持对错误类型操作的错误检查。

在这里插入图片描述

在这里插入图片描述

常用方法:可以使用Annotated[int, Body()定义一个只有一个参数数据类型的Body

在这里插入图片描述

FastAPI 在仅声明了一个请求体参数的情况下,将原本的请求体嵌入到一个键中。
如果想在调用接口的请求体中包含接口入参的名称item,需要使用item: Item = Body(embed=True)

在这里插入图片描述

在这里插入图片描述

如果使用Pydantic定义请求体Body时想要声明请求体参数数据的效验条件,可以导入Field实现。

在这里插入图片描述

可以通过Filed(examples=)这种形式为请求体添加example注释信息,这些注释信息会自动添加到接口定义的文档中。

在这里插入图片描述

如果Body中只有一个单体参数,也可以通过Body(examples=)方法生成文档的example例子

在这里插入图片描述

Body模型中引入examples后,接口文档中example的样式如下:

在这里插入图片描述

4. 响应模型和响应状态代码

4.1 响应模型

响应模型定义客户端调用APP的返回输出格式。

客户端访问API时,可以使用raise HTTPException()提示客户端访问API报错信息,错误代码为404,错误信息为“Item not found".

在这里插入图片描述

4.2 响应状态代码

在这里插入图片描述

它将:

  • 在响应中返回该状态代码。
  • 在 OpenAPI 架构中(以及用户界面中)中记录它:

在这里插入图片描述

5. 安装自定义异常处理程序

5.1 添加自定义异常处理程序

假设您有一个自定义异常,您(或您使用的库)可能 .UnicornExceptionraise

并且您希望使用 FastAPI 全局处理此异常。

您可以使用以下命令添加自定义异常处理程序:@app.exception_handler()

在这里插入图片描述

5.2 覆盖默认异常处理程序&覆盖请求验证异常

  1. 覆盖默认异常处理程序
  • FastAPI 有一些默认的异常处理程序。

  • 这些处理程序负责在您请求包含无效数据时返回默认 JSON 响应。raiseHTTPException

  • 您可以使用自己的异常处理程序覆盖这些异常处理程序。

  1. 覆盖请求验证异常
  • 当请求包含无效数据时,FastAPI 会在内部引发一个 .RequestValidationError

  • 它还包括一个默认的异常处理程序。

  • 要覆盖它,请导入 the 并使用它来装饰异常处理程序。RequestValidationError@app.exception_handler(RequestValidationError)

  • 异常处理程序将接收 a 和 exception.Request

在这里插入图片描述

5.3 RequestValidationError与ValidationError

RequestValidationError是 Pydantic 的ValidationError.

FastAPI 使用它,因此,如果你在 中使用 Pydantic 模型,并且你的数据有错误,你会在日志中看到错误。response_model

但客户端/用户不会看到它。相反,客户端将收到带有 HTTP 状态代码的“内部服务器错误” 。500

应该是这样的,因为如果你的响应中或代码中的任何位置(而不是客户端的请求)中有 Pydantic,它实际上是你代码中的一个错误。ValidationError

在修复错误时,您的客户/用户不应访问有关错误的内部信息,因为这可能会暴露安全漏洞。

使用主体RequestValidationError

这包含它收到的无效数据。RequestValidationErrorbody

您可以在开发应用程序时使用它来记录正文并对其进行调试,然后将其返回给用户等。

在这里插入图片描述
在这里插入图片描述

相关文章:

【学习篇】fastapi接口定义学习

fastapi学习链接:用户指南 1. 路径参数 访问fastapi接口的默认http路径为http://127.0.0.1:8000,/items为定义的接口函数read_item的路径,/{item_id}这个用大括号括起来的参数就是路径参数,接口函数可以通过引用这个路径参数名称…...

第十二步:react

React 1、安装 1、脚手架 npm i -g create-react-app:安装react官方脚手架create-react-app 项目名称:初始化项目 2、包简介 react:react框架的核心react-dom:react视图渲染核心react-native:构建和渲染App的核心…...

MySQL简介

MySQL 是由瑞典 MySQL AB 公司开发的一款开源关系型数据库管理系统(RDBMS),现归属 Oracle 公司。以下是其核心特点及简介: 1. 基础特性 - 开源免费:遵循 GPL 协议,个人及中小型企业可免费使用,…...

AIGC时代Kubernetes企业级云原生运维实战:智能重构与深度实践指南

文章目录 一、AIGC技术栈与Kubernetes的深度融合1. 智能配置生成:从YAML到自然语言2. 动态资源优化:AI驱动的弹性伸缩 二、智能运维体系架构深度解析四维能力矩阵增强实现:关键组件升级代码示例: 三、企业级实战策略深度实践策略1…...

市场波动与交易策略优化

市场波动与交易策略优化 在交易市场中,价格波动是常态。如何有效应对市场的波动,制定合理的交易策略,成为许多交易者关注的重点。本文将探讨市场波动的影响因素,并介绍应对不同市场波动环境的策略。 一、市场波动的影响因素 市场供…...

Prolog语言的移动UI设计

Prolog语言的移动UI设计 随着移动设备的普及,用户界面的设计已成为软件开发的重要组成部分。移动UI设计不仅要注重美观,更要关注用户体验和功能的实现。使用Prolog语言进行移动UI设计,虽然相对少见,但其逻辑编程的特性为复杂的交…...

linux 命令 awk

awk 是 Linux/Unix 系统中一个强大的文本处理工具,尤其擅长处理结构化文本数据(如日志、表格数据)。它不仅是命令行工具,还是一种脚本语言,支持变量、条件、循环等编程特性 1. 基本语法 awk [选项] 模式 {动作} 文件名…...

在 PyQt 加载 UI 三种方法

目录 方法一:使用 uic 模块动态加载 (不推荐用于大型项目) 方法二:将 UI 文件编译为 Python 模块后导入 方法3:使用uic模块直接在代码中加载UI文件 注意事项 总结: 在PyQt中,加载UI文件通常…...

前端快速入门学习2-HTML

一、概述 HTML全称是Hypertext Markup Language(超文本标记语言) HTML通过一系列的 标签(也称为元素) 来定义文本、图像、链接等等。HTML标签是由尖括号包围的关键字。 标签通常成对出现,包括开始标签和结束标签(也称为双标签),内容位于这两个标签之间…...

Cortex-M系列MCU的位带操作

Cortex-M系列位带操作详解 位带(Bit-Banding)是Cortex-M3/M4等处理器提供的一种硬件特性,允许通过别名地址对内存或外设寄存器中的单个位进行原子读-改-写操作,无需禁用中断或使用互斥锁。以下是位带操作的完整指南: …...

【嵌入式-stm32电位器控制LED亮灭以及编码器控制LED亮灭】

嵌入式-stm32电位器控制LED亮暗 任务代码Key.cKey.hmain.c 实验现象 任务 本文主要介绍利用stm32f103C8T6实现电位器控制PWM的占空比大小来改变LED亮暗程度,按键实现使用定时器非阻塞式,其中一个按键切换3个LED的控制状态,另一个按键是重置当…...

抖音热点视频识别与分片处理机制解析

抖音作为日活数亿的短视频平台,其热点视频识别和分片处理机制是支撑高并发访问的核心技术。以下是抖音热点视频识别与分片的实现方案: 热点视频识别机制 1. 实时行为监控系统 用户行为聚合:监控点赞、评论、分享、完播率等指标的异常增长曲线内容特征分析:通过AI识别视频…...

添加购物车功能

业务需求: 用户提交三个字段,服务端根据提交的字段判断是菜品还是套餐,根据菜品或者套餐添加购物车表中。 代码实现 RestController Slf4j RequestMapping("/user/shoppingCart") public class ShoppingCartController {Autowired…...

蓝桥杯备赛 Day16 单调数据结构

单调栈和单调队列能够动态的维护,还需用1-2两个数组在循环时从单调栈和单调队列中记录答案 单调栈 要点 1.时刻保持内部元素具有单调性质的栈(先进后出),核心是:入栈时逐个删除所有"更差的点",一般可分为单调递减栈、单调递增栈、单调不减栈、单调不增…...

AI Agent开发大全第十九课-神经网络入门 (Tensorflow)

(前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站)。 一、从买房困惑到神经元:神经网络的灵感来源 1.1 房地产经纪人的定价难题 想象一个周末的房产中介门店,经纪人小李正面对10份不同房源的报...

Mac VM 卸载 win10 安装win7系统

卸载 找到相应直接删除(移动到废纸篓) 可参考:mac如何卸载虚拟机win 下载 win7下载地址...

torch.nn中的非线性激活使用

1、神经网络中的非线性激活 在神经网络中,**非线性激活函数(Non-linear Activation Functions)**是引入非线性变换的关键组件,使神经网络能够学习并建模复杂的非线性关系。如果没有激活函数,无论神经网络有多少层&…...

【安全】Web渗透测试(全流程)_渗透测试学习流程图

1 信息收集 1.1 域名、IP、端口 域名信息查询:信息可用于后续渗透 IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常 端口信息查询:NMap扫描,确认开放端口 发现:一共开放两个端口&…...

要素的选择与转出

1.要素选择的三种方式 当要在已有的数据中选择部分要素时,ArcMap提供了三种方式:按属性选择、位置选择及按图形选择。 1)按属性选择 通过设置 SQL查询表达式,用来选择与选择条件匹配的要素。 (1)单击主菜单下【选择】【按属性选择】,打开【按…...

C 语言命令行参数:让程序交互更灵活

一、引言 在 C 语言编程领域,命令行参数是一种极为实用的机制,它允许我们在执行程序时,从外部向程序传递数据。这一特性极大地增强了程序的灵活性和可控性,避免了在代码中对数据进行硬编码。比如在开发系统工具、脚本程序时&…...

部署nerdctl工具

nerdctl 是一个专为Containerd设计的容器管理命令行工具,旨在提供类似 Docker 的用户体验,同时支持 Containerd 的高级特性(如命名空间、compose等)。 1、下载安装 wget https://github.com/containerd/nerdctl/releases/downlo…...

SOA 架构

定义与概念:SOA 将应用程序的不同功能单元(称为服务)进行封装,并通过定义良好的接口和协议来实现这些服务之间的通信和交互。这些服务可以在不同的平台和编程语言中实现,彼此之间相互独立,能够以松散耦合的…...

K8s私有仓库拉取镜像报错解决:x509 certificate signed by unknown authority

前言 在Kubernetes环境中使用自签名证书的私有Harbor镜像仓库时,常会遇到证书验证失败的问题。本文将详细讲解如何解决这个常见的证书问题。 环境信息: Kubernetes版本:1.28.2容器运行时:containerd 1.6.20私有仓库&#xff1a…...

在线考试系统带万字文档java项目java课程设计java毕业设计springboot项目

文章目录 在线考试系统一、项目演示二、项目介绍三、万字项目文档四、部分功能截图五、部分代码展示六、底部获取项目源码带万字文档(9.9¥带走) 在线考试系统 一、项目演示 在线考试系统 二、项目介绍 1、管理员角色: 考试管理&…...

Axure RP 9 详细图文安装流程(附安装包)教程包含下载、安装、汉化、授权

文章目录 前言一、Axure RP 9介绍二、Axure RP 9 安装流程1. Axure RP 9 下载2. 启动安装程序3. 安装向导操作4.完成安装 三、Axure RP 9 汉化四、Axure RP 9授权 前言 本基础安装流程教程,将以清晰、详尽且易于遵循的步骤介绍Axure RP 9 详细图文安装流程&#xf…...

动态规划练习题④

583. 两个字符串的删除操作 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1: 输入: word1 "sea", word2 "eat" 输出: 2 解释: 第一步将 &quo…...

多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测

多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测 目录 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测&#…...

爬虫工程师的社会现状

现在网上你只要搜索教程就是韦世东;k哥爬虫教你爬虫方面的逆向知识;然后看着这些逆向js百例;搞得我很尴尬我做了这么多年的爬虫工程师;现在算什么;这些逆向的东西我并没有很深层次的了解;但是工作的内容也依旧解决了;并没有到爬虫工程师非要会那么多逆向才能算的上是合格的爬虫…...

Flink 1.20 Kafka Connector:新旧 API 深度解析与迁移指南

Flink Kafka Connector 新旧 API 深度解析与迁移指南 一、Flink Kafka Connector 演进背景 Apache Flink 作为实时计算领域的标杆框架,其 Kafka 连接器的迭代始终围绕性能优化、语义增强和API 统一展开。Flink 1.20 版本将彻底弃用基于 FlinkKafkaConsumer/FlinkK…...

Vue2 父子组件数据传递与调用:从 ref 到 $emit

提示:https://github.com/jeecgboot/jeecgboot-vue2 文章目录 案例父组件向子组件传递数据的方式父组件调用子组件方法的方式子组件向父组件传递数据的方式流程示意图 案例 提示:以下是本篇文章正文内容,下面案例可供参考 以下是 整合后的关…...

【matplotlib参数调整】

1. 基本绘图函数常用参数 折线图 import matplotlib.pyplot as plt import numpy as npx np.linspace(0, 10, 100) y np.sin(x)plt.plot(x, y, colorred, linestyle--, linewidth2,markero, markersize5, labelsin(x), alpha0.8) plt.title(折线图示例) plt.xlabel(X 轴) p…...

如何使用 IntelliJ IDEA 开发命令行程序(或 Swing 程序)并手动管理依赖(不使用 pom.xml)

以下是详细步骤: 1. 创建项目 1.1 打开 IntelliJ IDEA。 1.2 在启动界面,点击 Create New Project(创建新项目)。 1.3 选择 Java,然后点击 Next。 1.4 确保 Project SDK 选择了正确的 JDK 版本&#x…...

Linux红帽:RHCSA认证知识讲解(十 一)配置NTP 时间同步、用户密码策略与使用 autofs 实现 NFS 自动挂载

Linux红帽:RHCSA认证知识讲解(十 一)配置NTP 时间同步、用户密码策略与 NFS 自动挂载 前言一、配置 NTP 时间同步1.1 NTP 简介1.2 安装和配置 NTP 客户端 二、配置新建用户密码过期时间2.1 查看用户密码过期时间2.2 修改密码过期时间 三、使用…...

ffmpeg音视频处理流程

文章目录 FFmpeg 音视频处理流程详细讲解总结音视频处理流程相关的 FFmpeg 工具和命令 FFmpeg 的音视频处理流程涵盖了从输入文件读取数据、编码和解码操作、数据处理、以及最终输出数据的完整过程。为了更好地理解这一流程,我们可以从以下几个关键步骤来分析&#…...

leetcode-代码随想录-链表-移除链表元素

题目 链接:203. 移除链表元素 - 力扣(LeetCode) 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 输入:head [1,2,6,3,4,5,6], val 6 …...

c++与rust的语言区别,rust的主要难点,并举一些例子

C 和 Rust 都是系统级编程语言,它们在设计目标、语法、内存管理等方面存在诸多区别,以下为你详细介绍: 设计目标 C:C 最初是为了给 C 语言添加面向对象编程特性而设计的,之后不断发展,旨在提供高性能、灵…...

从基础算力协作到超智融合,超算互联网助力大语言模型研习

一、背景 大语言模型(LLMs)的快速发展释放出了AI应用领域的巨大潜力。同时,大语言模型作为 AI领域的新兴且关键的技术进展,为 AI 带来了全新的发展方向和应用场景,给 AI 注入了新潜力,这体现在大语言模型独…...

【spring cloud Netflix】Eureka注册中心

1.概念 Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的 需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。同时,服务提供方与Eureka之间通过“心跳” 机制进行监控&#xf…...

记录学习的第二十天

今天只做了一道题,有点不在状态。 这道题其实跟昨天的每日一题是差不多的,不过这道题需要进行优化。 根据i小于j,且j小于k,当nums[j]确定时,保证另外两个最大即可得答案。 所以可以使用前缀最大值和后缀最大值。 代…...

7-5 表格输出

作者 乔林 单位 清华大学 本题要求编写程序,按照规定格式输出表格。 输入格式: 本题目没有输入。 输出格式: 要求严格按照给出的格式输出下列表格: ------------------------------------ Province Area(km2) Pop.(…...

【爬虫开发】爬虫开发从0到1全知识教程第14篇:scrapy爬虫框架,介绍【附代码文档】

本教程的知识点为:爬虫概要 爬虫基础 爬虫概述 知识点: 1. 爬虫的概念 requests模块 requests模块 知识点: 1. requests模块介绍 1.1 requests模块的作用: 数据提取概要 数据提取概述 知识点 1. 响应内容的分类 知识点&#xff1a…...

安装 Microsoft Visual C++ Build Tools

Microsoft Visual C Build Tools下载安装 安装Microsoft Visual C Build Tools是为了在windows系统上编译和运行需要C支持的程序或库(例如某些Python包,Node.js模块等)。 1.下载 打开浏览器,访问 Visual Studio Build Tools下载…...

启服云专利管理系统:铸就知识产权保护的坚固壁垒

在全球竞争日益激烈的今天,知识产权已经成为企业核心竞争力的关键组成部分,而专利作为知识产权的重要体现,其管理和保护显得尤为重要。启服云专利管理系统凭借其卓越的功能和先进的技术,在知识产权保护领域展现出了显著的优势。 高…...

树莓派 5 部署 OMV(OpenMediaVault)

我使用Raspberry Pi OS Lite【Debian version: 12 (bookworm)】搭建OMV 换源,换源教程请参考:树莓派 5 换源 加入omv国内清华源 # 创建openmediavault.list文件 touch /etc/apt/sources.list.d/openmediavault.list # 加入内容 echo "deb [signed…...

Opencv之dilib库:表情识别

一、简介 在计算机视觉领域,表情识别是一个既有趣又具有挑战性的任务。它在人机交互、情感分析、安防监控等众多领域都有着广泛的应用前景。本文将详细介绍如何使用 Python 中的 OpenCV 库和 Dlib 库来实现一个简单的实时表情识别系统。 二、实现原理 表情识别系统…...

吾爱置顶软件,吊打电脑自带功能!

今天我给大家带来一款超棒的软件,它来自吾爱论坛的精选推荐,每一款都经过精心挑选,绝对好用! S_Clock 桌面计时软件 这款软件的界面设计特别漂亮,简洁又大方。它是一款功能齐全的时钟计时倒计时软件,既能正…...

深入理解浏览器的事件循环

浏览器的进程模型 浏览器进程:负责子进程的管理和用户交互网络进程:负责加载网络资源渲染进程:浏览器会为每一个标签页开启一个新的渲染进程。 渲染进程中的渲染主线程是我们最关注的,因为浏览器的事件循环就发生在这之中渲染主进…...

分布式锁之redis6

一、分布式锁介绍 之前我们都是使用本地锁(synchronize、lock等)来避免共享资源并发操作导致数据问题,这种是锁在当前进程内。 那么在集群部署下,对于多个节点,我们要使用分布式锁来避免共享资源并发操作导致数据问题…...

数据框的添加

在地图制图中,地图全图显示的同时希望也能够显示局部放大图,以方便查看地物空间位置的同时,也能查看地物具体的相对位置。例如,在一个名为airport的数据集全图制图过程中,希望能附上机场区域范围的局部地图&#xff0c…...

SQL Server 2022 读写分离问题整合

跟着热点整理一下遇到过的SQL Server的问题,这篇来聊聊读写分离遇到的和听说过的问题。 一、读写分离实现方法 1. 原生高可用方案 1.1 Always On 可用性组(推荐方案) 配置步骤: -- 1. 启用Always On功能 USE [master] GO ALT…...