深入FastAPI:掌握使用多个关联模型的高级用法[Union类型]

在FastAPI中,响应模型可以声明为Union类型,这允许你为同一个端点定义多种可能的响应模型。这种灵活性使得API可以根据不同的情况返回不同类型的数据结构。

例如,根据请求中的查询参数或数据库中的数据,一个API端点可能有时返回一个用户模型,有时返回一个订单模型。使用Union类型,你可以为这些不同的响应定义一个统一的响应模型,从而提高代码的可维护性和API的可用性。这种方法也有助于在API文档中清晰地展示各种可能的响应类型,为开发者和API用户提供更好的指导。

回忆response_model模型

···
response_model模型
···

UNION

响应类可以声明为多种类型,Union 类型就是其中的一种,从多个响应类内输出一个

from typing import Unionfrom fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()# 定义基础项目模型
class BaseItem(BaseModel):description: str  # 项目的描述type: str  # 项目的类型# 定义特定类型的项目模型
class CarItem(BaseItem):type: str = "car"  # 车辆类型的项目class PlaneItem(BaseItem):type: str = "plane"  # 飞机类型的项目size: int  # 飞机的大小# 存储项目的字典
items = {"item1": {"description": "All my friends drive a low rider","type": "car",},"item2": {"description": "Music is my aeroplane, it's my aeroplane","type": "plane","size": 5,},
}# 定义路由,根据item_id返回对应的项目信息
@app.get("/items/{item_id}", response_model=Union[PlaneItem, CarItem])
async def read_item(item_id: str) -> Union[PlaneItem, CarItem]:  # 根据item_id获取项目信息return items[item_id]

在这个代码中,我们定义了两个模型 CarItemPlaneItem,它们都继承自 BaseItem。我们还定义了一个字典 items 来模拟数据库中的数据。

read_item 函数通过 item_id 参数来获取相应的项目信息,并返回一个 Union[PlaneItem, CarItem] 类型的对象。这意味着函数的返回值可以是 PlaneItem 类型或者 CarItem 类型,这取决于 items 字典中 type 字段的值。

当我们访问 /items/item1 时,输出结果将是:

{"description": "All my friends drive a low rider","type": "car"
}

而当我们访问 /items/item2 时,输出结果将是:

{"description": "Music is my aeroplane, it's my aeroplane","type": "plane","size": 5
}

这些输出结果由FastAPI根据请求的 item_id 参数和 items 字典中的数据自动生成。FastAPI会根据返回值的类型自动序列化为JSON格式。

针对不同场景,可以随意使用不同的 Pydantic 模型继承定义的基类。

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

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

相关文章

数学建模_数据预处理流程(全)

数据预处理整体流程图 一般数据预处理流程 处理缺失值:填补或删除缺失值。处理异常值:检测并处理异常值。数据编码:将分类变量进行标签编码或独热编码。数据标准化/归一化:对数据进行标准化或归一化处理。连续变量离散化&#xff…

微信小程序页面制作——个人信息

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

在Unity环境中使用UTF-8编码

为什么要讨论这个问题 为了避免乱码和更好的跨平台 我刚开始开发时是使用VS开发,Unity自身默认使用UTF-8 without BOM格式,但是在Unity中创建一个脚本,使用VS打开,VS自身默认使用GB2312(它应该是对应了你电脑的window版本默认选取了国标编码,或者是因为一些其他的原因)读取脚本…

代码执行漏洞-Log4j2漏洞 vulhub CVE-2021-44228

步骤一:执行以下命令启动靶场环境并在浏览器访问!!! 查看端口 浏览器访问 可以发现 /solr/admin/cores?action 这⾥有个参数可以传,可以按照上⾯的原理 先构造⼀个请求传过去存在JNDI注⼊那么ldap服务端会执⾏我们传上去的payload JDNI项⽬地址 https://github.com…

git的使用和gdb工具

1.git的使用 首先现在gitee上新建一个仓库 然后复制克隆链接到本地仓库 在本地仓库中,我们可以用git status查看仓库状态 我们要提交代码就是要三步 git add 文件名 git commit -m "写提交的日志" git push 将代码上传到远端仓库 然后你就完成一次提…

uuid.js 使用

相关代码 import { NIL } from "uuid";/** 验证UUID* 为空 则返回 false* param uuid* returns {boolean}*/ export function MyUUIDValidate(uuid: any): boolean {if (typeof uuid "string" && uuid ! NIL) { //uuid ! NIL 判断是否是默认值00…

小白建立个人网站初步尝试

一、VScode 代码是在VScode上运行的&#xff0c;可以看作者另一篇文章&#xff1a;http://t.csdnimg.cn/mOmdF 二、代码基本框架 代码解释<!DOCTYPE html>声明为HTML5文档<html><head>头部元素&#xff0c;不显示在页面<meta charset"utf-8"…

直击智博会,supOS加快发展新质生产力,赋能全球工厂数字化转型

9月6日&#xff0c;第十四届智慧城市与智能经济博览会&#xff08;以下简称智博会&#xff09;开幕主题活动在宁波举办。本届智博会着重围绕“数字赋能新型工业化”主题&#xff0c;设置开幕活动、展览展示和前瞻研讨、产数合作、赛事赋能、开放活动等4大板块活动&#xff0c;旨…

windows 环境下搭建mysql cluster 集群详细步骤

1、环境准备 下载mysql集群版本&#xff0c;我这里下载的是mysql-cluster-8.0.39-winx64 https://dev.mysql.com/downloads/cluster/ 2、创建配置文件 mysql集群版本下载以后解压后目录如下&#xff0c;创建配置文件 config.ini(集群配置文件&#xff0c;my.ini mysql配置…

如何把自动获取的ip地址固定

在大多数网络环境中&#xff0c;‌设备通常会自动从DHCP服务器获取IP地址。‌这种动态分配IP的方式虽然灵活方便&#xff0c;‌但在某些特定场景下&#xff0c;‌我们可能需要将设备的IP地址固定下来&#xff0c;‌以确保网络连接的稳定性和可访问性。‌本文将详细介绍如何把自…

单GPU一分钟生成16K高清图像!新加坡国立发布LinFusion:无缝兼容Stable Diffusion插件

论文链接&#xff1a;https://arxiv.org/pdf/2409.02097 Git链接&#xff1a;https://lv-linfusion.github.io/ 亮点直击 本文研究了Mamba的非因果和归一化感知版本&#xff0c;并提出了一种新颖的线性注意力机制&#xff0c;解决了扩散模型在高分辨率视觉生成中的挑战。 本文…

oracle数据库安装和配置

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; Oracle 数据库的安装和配置是一个较为复杂的过程&#xff0c;涉及多个步骤和配置项。以下将详细介绍如何在 Linux 和 Windows 系统中安装 Oracle 数据库并进行基础配置。 一、Oracle 数据库安装前的准备 …

如何使用微软的Copilot AI工具将Word文档转换为PowerPoint

Copilot 让你可以将 Word 文档转换为 PowerPoint 演示文稿&#xff0c;使你能够以最小的努力制作出有针对性的演示文稿。这个功能是微软AI工具包的一部分&#xff0c;对于那些曾经盯着空白幻灯片不知道从何开始的人来说&#xff0c;这是一个颠覆性的改变。要充分利用这个工具&a…

【web网页制作】html+css旅游家乡河南主题网页制作(5页面)【附源码】

一、&#x1f468;‍&#x1f393;网站题目 旅游&#xff0c;当地特色&#xff0c;历史文化&#xff0c;特色小吃等网站的设计与制作。 二、✍️网站描述 &#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS 等来完成页面的排版设计&#x1f469;‍&#x1f393;…

Elasticsearch:无状态世界中的数据安全

作者&#xff1a;来自 Elastic Henning Andersen 在最近的博客文章中&#xff0c;我们宣布了支持 Elastic Cloud Serverless 产品的无状态架构。通过将持久性保证和复制卸载到对象存储&#xff08;例如 Amazon S3&#xff09;&#xff0c;我们获得了许多优势和简化。 从历史上…

QT6聊天室项目 网络通信实现逻辑分析

实现逻辑 模块话网络通信设计分析 NetClient类 功能&#xff1a;负责与服务器进行通信httpClient:处理HTTP请求websocketClient&#xff1a;处理WebSocket通信 HTTP请求封装 设计请求和服务器响应的接口设计函数测试网络连接性设计处理的函数处理HTTP请求&#xff08;后期实现…

【Linux】System V通信

目录 System V共享内存 共享内存数据结构 共享内存函数 共享内存的关联 共享内存的去关联 用共享内存实现serve&client通信 共享内存与管道进行对比 System V共享内存 管道通信本质是基于文件的&#xff0c;也就是说操作系统并没有为此做过多的设计工作&#xff0c;…

【网络安全】服务基础第二阶段——第二节:Linux系统管理基础----Linux统计,高阶命令

目录 一、Linux高阶命令 1.1 管道符的基本原理 1.2 重定向 1.2.1 输出重定向 1.2.2 输入重定向 1.2.3 wc命令基本用法 1.3 别名 1.3.1 which命令基本语法 1.3.2 alias命令基本语法 1.4 压缩归档tar 1.4.1 第一种&#xff1a;gzip压缩 1.4.2 第二种&#xff1a;bzip…

SpringBoot3 简单集成 Mybatis plus

SpringBoot3 集成 Mybatis plus 1、引入Mybatisplus的starter <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.7</version></dependency>2、引入数据…

前端HTML基础笔记

HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用于创建网页的标准标记语言。它通过一系列的元素&#xff08;或称为标签&#xff09;来定义网页的结构和内容。HTML文档由一系列的元素组成&#xff0c;这些元素可以包含文本、图片、链…