FastAPI 第七课 -- Pydantic 模型

news2024/11/17 23:50:25

目录

一. 前言

二. 定义 Pydantic 模型

三. 使用 Pydantic 模型

3.1. 请求体验证

3.2. 查询参数验证

四. 自动文档生成

五. 数据转换和序列化


一. 前言

Pydantic 是一个用于数据验证和序列化的 Python 模型库。

它在 FastAPI 中广泛使用,用于定义请求体、响应体和其他数据模型,提供了强大的类型检查和自

动文档生成功能。

以下是关于 Pydantic 模型的详细介绍:

二. 定义 Pydantic 模型

使用 Pydantic 定义一个模型非常简单,只需创建一个继承自 pydantic.BaseModel 的类,并在其中

定义字段。字段的类型可以是任何有效的 Python 类型,也可以是 Pydantic 内置的类型。

from pydantic import BaseModel

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

以上代码中中,我们定义了一个名为 Item 的 Pydantic 模型,包含了四个字段:name、

description、price 和 tax,name 和 price 是必需的字段,而 description 和 tax 是可选的字段,其

中 tax 的默认值为 None。

三. 使用 Pydantic 模型

3.1. 请求体验证

在 FastAPI 中,可以将 Pydantic 模型用作请求体(Request Body),以自动验证和解析客户端发

送的数据。

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

@app.post("/items/")
def create_item(item: Item):
    return item

以上代码中中,create_item 路由处理函数接受一个名为 item 的参数,其类型是 Item 模型。

FastAPI 将自动验证传入的 JSON 数据是否符合模型的定义,并将其转换为 Item 类型的实例。

3.2. 查询参数验证

Pydantic 模型还可以用于验证查询参数、路径参数等。

from fastapi import FastAPI, Query
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: str = None
    price: float
    tax: float = None

@app.get("/items/")
def read_item(item: Item, q: str = Query(..., max_length=10)):
    return {"item": item, "q": q}

以上代码中,read_item 路由处理函数接受一个 Item 模型的实例作为查询参数,以及一个名为 q 的字符串查询参数。通过使用 Query 函数,我们还可以为查询参数指定更多的验证规则,如最大长度限制。

四. 自动文档生成

使用 Pydantic 模型的一个重要优势是,它能够自动为 FastAPI 生成交互式 API 文档。文档会包括模型的字段、类型、验证规则等信息,让开发者和 API 使用者能够清晰地了解如何正确使用 API。

打开 http://127.0.0.1:8000/docs,API 文档显示如下:

五. 数据转换和序列化

Pydantic 模型不仅提供了验证功能,还可以用于将数据转换为特定类型(例如 JSON)或反向序列化。在 FastAPI 中,这种能力是自动的,你无需手动处理。

通过使用 Pydantic 模型,你可以更轻松地定义和验证数据,使得代码更清晰、更健壮,并通过自动生成的文档提供更好的 API 交互体验。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸢尾花书实践和知识记录[编程1-10可视化]

一个人可以被摧毁,但不能被打败。 A man can be destroyed but not defeated 原作者的github 主要内容Matplotlib,Plotly如何绘制线图 文章目录 思维导图解剖图代码:图像的要素和标注 使用Matplotlib绘制线图代码2:绘制正弦和余弦的图像图像存储格式的说明 代码3子…

Linux 默认内核版本更改

随笔记录 目录 1. 背景介绍 2. 解决方法 2.1 查看所有可用版本 2.2 安装指定版本内核 2.3 检查当前内核列表 2.4 检查当前默认内核 2.5 设置新的默认内核 2.6 确认内核是否成功加载 2.7 重启 2.8 删除其他版本内核 1. 背景介绍 linux 一般安装多个内核版本&…

97、配置 VXLAN 不同子网互访 (分布式网关)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、基础配置SW1SW2IGP IS-IS 二、VXLAN1.引入库 总结 前言 一、基础配置 SW1 vlan 10 vlan 20interface GigabitEthernet0/0/1port link-type accessport de…

[Python学习日记-33] Python 中的嵌套函数、匿名函数和高阶函数

[Python学习日记-33] Python 中的嵌套函数、匿名函数和高阶函数 简介 嵌套函数 匿名函数 高阶函数 简介 在 Python 当中函数除了能减少重复代码、扩展性强和易维护外,其实还有挺多不通的玩法的,例如嵌套函数、匿名函数、高阶函数等,它们是…

酒店智能开关的组成与功能

酒店智能开关作为智能家居系统的重要组成部分,其应用日益广泛。本文将深入探讨酒店智能开关的组成部分及其功能特点。 酒店智能开关的组成 酒店智能开关的构成相对复杂,但主要可以归纳为以下几个核心部分: 开关主体:开关主体是智能…

带链的队列,入队,退队,检测带链队列的状态

代码&#xff1a; #include<iostream> using namespace std; template<class T> struct node {T d;node *next;}; template<class T> class linked_Queue {private:node<T> *front;node<T> *rear;public:linked_Queue();void prt_linked_Queue(…

联想电脑怎么开启vt_联想电脑开启vt虚拟化教程(附intel和amd主板开启方法)

最近使用联想电脑的小伙伴们问我&#xff0c;联想电脑怎么开启vt虚拟。大多数可以在Bios中开启vt虚拟化技术&#xff0c;当CPU支持VT-x虚拟化技术&#xff0c;有些电脑会自动开启VT-x虚拟化技术功能。而大部分的电脑则需要在Bios Setup界面中&#xff0c;手动进行设置&#xff…

掌握DFIR报表: 法医专家指南

介绍 在数字安全领域&#xff0c;DFIR&#xff08;数字取证和事件响应&#xff09;是一门重要的学科&#xff0c;体现了调查网络事件和破坏行为所必不可少的方法和实践。作为DFIR的核心&#xff0c;对DFIR报告的重视怎么强调都不为过。这些报告不仅仅是文件&#xff1b;它们是…

每天3分钟,彻底弄懂神经网络的优化器(三)Momentum

前面从最初的SGD开始&#xff0c;介绍SGD的算法细节&#xff0c;以及其在深度神经网络中的劣势&#xff0c;本文引入Momentum算法&#xff0c;解决SGD的一些问题。 1. Momentum算法的提出 动量&#xff08;Momentum&#xff09;方法最初由B.T.Polyak在1964年提出。这一方法被…

IAR全面支持国科环宇AS32X系列RISC-V车规MCU

IAR嵌入式开发解决方案将全面支持国科环宇AS32X系列ASIL-B MCU&#xff0c;共同推动汽车高品质应用的安全开发 中国上海&#xff0c;2024年9月29日 – 全球领先的嵌入式系统开发软件解决方案供应商IAR与北京国科环宇科技股份有限公司&#xff08;以下简称“国科环宇”&#xf…

Rust语言桌面应用开发GTK3 Gtk3-rs Glade

文章目录 GTK-RSGithub官网Rust 教程Rust 环境安装 GTK安装 Gladedemo.glade 文件完整示例 main.rs创建 Rust 项目Cargo.toml 文件main.rs 文件 编译运行GTK主题 GTK-RS gtk-rs 是一个用于在 Rust 编程语言中使用 GTK 图形用户界面工具包的库。GTK 是一个流行的跨平台 GUI 工具…

每日论文7-17MWCL基于IMOS的小vco增益变化的VCO

《Small VCO-Gain Variation Adding a Bias-Shifted Inversion-Mode MOS Varactor》17MWCL 对于PLL来说&#xff0c;其中VCO的调谐增益KVCO越线性&#xff0c;其变化程度ΔKvco越小&#xff0c;对PLL的稳定有较大的好处。这篇文章给了一个很简单朴素而有效的补偿var非线性的方…

Maven 编译和Nexus 构建私有仓库

Java 程序编译 编译流程 C 语言源码编译过程&#xff0c;对于单文件&#xff0c;我们可以使用 gcc 命令直接编译即可&#xff0c;但如果是大型商业项目&#xff0c;源码文件多&#xff0c;存在各种依赖&#xff0c;各种配置路径&#xff0c;各种库的支持等&#xff0c;几乎无法…

C0004.Qt中QComboBox设置下拉列表样式后,下拉列表样式无效的解决办法

问题描述 我们平时在使用Qt Creator对控件QComboBox的样式进行设置后,在运行程序启动界面时,发现设置的样式无效,效果如下: /* 设置下拉菜单框的样式 */ QComboBox QAbstractItemView {border: 1px solid rgb(161,161,161); /* 下拉菜单框的边框样式 */ }/* 设置下拉菜单…

现在转行AI晚不晚,应该怎么做呢?

对于40岁以上的非AI程序员来说&#xff0c;转行进入AI领域虽然可能面临一些挑战&#xff0c;但并非不可实现。凭借你已有的编程经验和技术背景&#xff0c;加上适当的学习策略和实践&#xff0c;你可以成功跨入AI领域。以下是一些针对40岁程序员转行AI的建议&#xff0c;特别是…

GCC使用入门

文章目录 GCC简介单个文件编译过程预处理(Preprocessing)编译(Compilation)汇编(Assembly)链接(Linking) 多文件编译过程头文件搜索路径三种不推荐的方法两种推荐的方法 库文件静态库文件创建和使用静态库链接顺序 动态库文件创建和使用动态库 Warning编译选项调试信息(-g)编译…

快递单号物流跟踪管理快速筛选出已签收单号

看着满屏的单号&#xff0c;是不是感觉眼前一黑要查询到什么时候&#xff1f;别灰心&#xff0c;这不快递批量查询高手来了&#xff01;这神器就是用来查询物流的好帮手。一键筛选已签收件单号&#xff0c;并导出表格。有了它&#xff0c;你也能轻松查询大量的单号物流。一起试…

买前必看,教你挑选适合自己的蓝牙耳机(我早点刷到该多好啊)

无论是运动、通勤&#xff0c;还是休闲娱乐时&#xff0c;蓝牙耳机已经成为我们便捷生活的一部分。那么&#xff0c;市场上这么多款蓝牙耳机&#xff0c;我们究竟该怎么选&#xff1f;耳机挑不对&#xff0c;买了也白费&#xff01;买蓝牙耳机之前要搞清楚耳机的这些参数&#…

【算法业务】关于数据驱动的用户增长思考

这篇内容是多年之前&#xff08;2020年&#xff09;的用户增长项目时自己写的总结&#xff0c;这里做一下对于实践和思考的回顾&#xff0c;便于知识的记录和经验分享&#xff0c;内容涉及用户增长理解、个性化推送系统框架、个性化推送问题建模、推送内容池构建、智能文案生成…

BMT Building Maker Toolset 房屋建筑快速创建工具

BuildingMakerToolset提供了一个用于创建建筑和放置预制件的自定义工作流程。 如果你需要为你的游戏设计一些带室内装饰的建筑,或者你是一名关卡设计师,你想让你的工作流程更有效,这可能是适合你的资产。 该工具集与200多个墙壁、电缆、管道等预制件配对。所有预制件都指定了…