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

FastAPI之响应模型

前言

响应模型我认为最主要的作用就是在自动化文档的显示时,可以直接给查看文档的小伙伴显示返回的数据格式。对于后端开发的伙伴来说,其编码的实际意义不大,但是为了可以不用再额外的提供文档,我们只需要添加一个 response_model=xxx,还是很爽的

示例

没有响应模型

from fastapi import FastAPI, Header
from pydantic import BaseModelapp = FastAPI()class Resp(BaseModel):code: intmsg: strdata: list@app.get("/")
async def read_root():return Resp(code=0, msg='success', data=[{"name": "Python"}, {"name": "Java"}])

效果
在这里插入图片描述

此时我们的文档只可以看到返回的是字符串,这和没写文档一样,现在尝试加上response_model

添加响应模型

from fastapi import FastAPI, Header
from pydantic import BaseModelapp = FastAPI()class User(BaseModel):id: intname: strclass Resp(BaseModel):code: intmsg: strdata: list[User]@app.get("/",response_model=Resp)
async def read_root():return Resp(code=0,msg='success',data=[User(id=1, name='test'),User(id=2, name='test2')])

打开自动化文档,显示效果如下:
在这里插入图片描述
此时我们需要格外注意,我们规定了返回的是Resp模型,这个模型中有code、msg、data三个字段,如果我们返回的数据缺少了一个字段,那么,请求接口的时候,就会报错,比如我们把msg='success'注释掉,再次请求,将会有错误产生:
在这里插入图片描述

进阶使用:response_model_exclude_unset

如果你不想在响应模型中包括默认值未被修改的字段,你可以使用response_model_exclude_unset参数。

@app.post("/items/exclude_unset", response_model=Item, response_model_exclude_unset=True)
async def create_item_exclude_unset(item: Item):return item

在这个例子中,如果你提交了一个不包含descriptiontax字段的请求(因为它们有默认值且未修改),响应将不会包含这些字段。

response_model_includeresponse_model_exclude

response_model_includeresponse_model_exclude参数让你可以更精细地控制响应数据。response_model_include指定应该包含的字段,而response_model_exclude指定应该排除的字段。

只包含特定字段

@app.post("/items/include", response_model=Item, response_model_include={"name", "price"})
async def create_item_include(item: Item):return item

在这个例子中,响应只会包含nameprice字段,即使其他字段在请求体中被定义。

排除特定字段

@app.post("/items/exclude", response_model=Item, response_model_exclude={"tax"})
async def create_item_exclude(item: Item):return item

在这个例子中,返回的响应将不包含tax字段。

实操演示

为了更好地理解这些概念,我们实现一个实例,其中我们创建一个简单的商品入库API,并在不同的端点展示response_model的不同用法。

from typing import Setfrom fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strdescription: str = Noneprice: floattax: float = Nonetags: Set[str] = set()# 默认的response_model使用
@app.post("/items/", response_model=Item)
async def create_item(item: Item):return item# 排除未设置的字段
@app.post("/items/exclude_unset", response_model=Item, response_model_exclude_unset=True)
async def create_item_exclude_unset(item: Item):# 模拟item创建return item# 只包含特定字段
@app.post("/items/include_only", response_model=Item, response_model_include=["name", "price"])
async def create_item_include_only(item: Item):# 模拟item创建return item# 排除特定字段
@app.post("/items/exclude_some", response_model=Item, response_model_exclude=["tax"])
async def create_item_exclude_some(item: Item):# 模拟item创建return item

当你运行这个FastAPI应用并向这些端点发送请求时,你应该会注意到,每个端点都根据设定的参数,返回不同结构的JSON响应。

记得要调试和测试每个端点,确保它的行为符合预期,这样你就能更好地理解response_model的这些高级特性如何帮助你控制API的响应格式。

结论

response_model和其他相关参数提供了强大的方式来控制你的API响应。通过选择性地包括、排除或者隐藏响应数据的特定字段,你可以创建更加灵活和高效的API端点。这些特性尤其在处理大型数据模型或希望限制客户端收到数据的场景下非常有用。通过本教程的介绍,希望你能在自己的FastAPI项目中更加自如地使用这些高级功能。

相关文章:

FastAPI之响应模型

前言 响应模型我认为最主要的作用就是在自动化文档的显示时,可以直接给查看文档的小伙伴显示返回的数据格式。对于后端开发的伙伴来说,其编码的实际意义不大,但是为了可以不用再额外的提供文档,我们只需要添加一个 response_mod…...

Python数据科学视频讲解:数据清洗、特征工程和数据可视化的注意事项

1.6 数据清洗、特征工程和数据可视化的注意事项 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解1.6节内容。本书已正式出版上市,当当、京东、淘宝等平台热销中,搜索书名即可。内容涵盖数据科学应用的全流程…...

Unity优化——加速物理引擎1

大家好,这里是七七,今天开始更新物理引擎相关的优化部分了,本文介绍的是物理引擎内部工作情况。 Unity技术有两种不同的物理引擎:用于3D物理的Nvidia的PhysX和用于2D物理的开源项目Box2D。然而,Unity对它们的实现是高…...

PHP的最新版本是多少?有什么新特性?

截至日期(2022年1月),PHP的最新稳定版本是PHP 8.0。以下是PHP 8.0的一些主要新特性: JIT 编译器: 引入了即时编译(Just-In-Time,JIT)引擎,提升了PHP脚本的执行性能。 命…...

漏洞复现-云安宝-云匣子Fastjson命令执行(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…...

oh-my-zsh 安装和配置

安装zsh sudo apt update sudo apt install zsh安装oh-my-zsh sh -c "$(curl -fsSL https://gitee.com/mirrors/oh-my-zsh/raw/master/tools/install.sh)"配置~/.zshrc sudo vim ~/.zshrc添加以下内容 ZSH_THEME"steeef" HISTFILE~/.zsh_history HISTS…...

LinuxBasicsForHackers笔记 -- 日志系统

日志文件存储有关操作系统和应用程序运行时发生的事件的信息,包括任何错误和安全警报。 rsyslog 日志守护进程 Linux 使用名为 syslogd 的守护进程自动记录计算机上的事件。 rsyslog 配置文件 与 Linux 中的几乎所有应用程序一样,rsyslog 由位于 /et…...

WPS Office JS宏实现批量处理Word中的标题和正文的样式

该篇讲解下word文档中的标题和正文批量修改样式,如下图: 前面一篇已讲解了WPS Office宏编辑器操作方法,这里不细讲了,如有不清楚可以查看该篇:https://blog.csdn.net/jiciqiang/article/details/134653657?spm1001.20…...

论文怎么改才能降低重复率

一、引言:智能工具助力,轻松降低论文重复率 论文的重复率是学术写作中的重要问题,如何有效降低重复率成为了许多研究者的关注焦点。如今,智能工具的发展为我们提供了更多选择。本文将介绍几种实用的智能工具,包括快码…...

【从零开始学习JVM | 第六篇】快速了解 直接内存

前言: 当谈及Java虚拟机(JVM)的内存管理时,我们通常会想到堆内存和栈内存。然而,还有一种被称为"直接内存"的特殊内存区域,它在Java应用程序中起着重要的作用。直接内存提供了一种与Java堆内存和…...

Wireshark中的http协议包分析

Wireshark可以跟踪网络协议的通讯过程,本节通过http协议,在了解Wireshark使用的基础上,重温http协议的通讯过程。 TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于 字节流…...

ubuntu如何远程ssh登录Windows环境并执行测试命令

ubuntu如何远程ssh登录Windows环境并执行测试命令 1 paramiko模块简介1.1 安装paramiko1.2 paramiko基本用法1.2.1 创建SSHClient实例1.2.2 设置主机密钥策略1.2.3 连接SSH服务器1.2.4 执行命令1.2.5 关闭SSH连接1.2.6 异常处理 2 windows的配置2.1 启动OpenSSH服务2.2 配置防火…...

人工智能应用专栏----专栏介绍

文章目录 本专栏主要记录人工智能的应用方面的内容,包括chatGPT、AI绘图等等; 订阅后可私聊我获取 《从零注册并登录使用ChatGPT》 《从零开始使用chatGPT的API;通过chatgpt-next-web部署自己chatGPT web网页;无需翻墙&#xff0c…...

【lesson11】表的约束(4)

文章目录 表的约束的介绍唯一键约束测试建表插入测试建表插入测试建表插入测试修改表插入测试 表的约束的介绍 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保…...

将单体应用程序迁移到微服务

多年来,我处理过多个单体应用,并将其中一些迁移到了微服务架构。我打算写下我所学到的东西以及我从经验中用到的策略,以实现成功的迁移。在这篇文章中,我将以AWS为例,但基本原则保持不变,可用于任何类型的基…...

Python读取.dat格式数据并转为.png,.jpg,.bmp等可视化格式(附代码)

.dat文件的命名规则没有统一的规定,但通常以.dat为扩展名。 目录 一、 .dat格式数据1.1 .dat数据用途1.2 常见的.dat文件格式1.3 .dat文件示例 二、读取.dat格式数据2.1 单个.dat文件读取并转换2.1.1 代码2.1.2 查看数据2.1.3 输出查看8Bit图片 2.2 批量.dat文件读取…...

matplotlib 默认属性和绘图风格

matplotlib 默认属性 一、绘图风格1. 绘制叠加折线图2. Solarize_Light23. _classic_test_patch4. _mpl-gallery5. _mpl-gallery-nogrid6. bmh7. classic8. fivethirtyeight9. ggplot10. grayscale11. seaborn12. seaborn-bright13. seaborn-colorblind14. seaborn-dark15. sea…...

ip地址怎么转化为十进制

​IP地址是在计算机网络中广泛使用的一种标识符,它用于唯一地标识网络上的设备。在网络通信过程中,IP地址扮演着非常重要的角色。但是,对于一些非专业人士来说,IP地址可能是一个陌生的概念。为了更好地理解IP地址,本文…...

【Spring进阶系列丨第五篇】详解Spring中的依赖注入

文章目录 一、说明二、构造函数注入2.1、方式一【index索引方式】2.1.1、定义Bean2.1.2、主配置文件中配置Bean2.1.3、测试 2.2、方式二【indextype组合方式】2.2.1、定义Bean2.2.2、主配置文件配置Bean2.2.3、测试2.2.4、解决方案 2.3、方式三【name方式】2.3.1、定义Bean2.3.…...

DAP数据集成与算法模型如何结合使用

企业信息化建设会越来越完善,越来越体系化,当今数据时代背景下更加强调、重视数据的价值,以数据说话,通过数据为企业提升渠道转化率、改善企业产品、实现精准运营,为企业打造自助模式的数据分析成果,以数据…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

WebRTC从入门到实践 - 零基础教程

WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC&#xff1f; WebRTC&#xff08;Web Real-Time Communication&#xff09;是一个支持网页浏览器进行实时语音…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...