python的FastAPI两大核心组件,你了解多少

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.8+ 并基于标准的 Python 类型提示。

FastAPI 站在以下巨人的肩膀之上:

  • Starlette 负责 web 部分。
  • Pydantic 负责数据部分。

毕竟我们不是学习 Starlette 和 Pydantic 的,但我们至少需要了解 Starlette 和 Pydantic ,知道他们各自的作用是什么,毕竟 FastAPI 是在这两者的基础上进行开发的。如果你之前了解 Starlette 或者 Pydantic,学习 FastAPI 也会更加的得心应手。

Starltette:

FastAPIStarlette 完全兼容的。FastAPI 实际上是 Starlette的一个子类。所以,如果你已经知道或者使用 Starlette,大部分的功能会以相同的方式工作。所以在一定程度上可以认为 FastAPI 是加强版的 Starlette。通过 FastAPI 可以获得 Starlette 所有特性

Starlette是一个轻量级的异步Web框架,专注于构建高性能、异步的Web应用程序和API。它具有以下主要作用:

  1. 异步处理:Starlette基于异步协程编程模型,使用Python的asyncawait关键字来编写异步代码。这使得Starlette能够处理并发请求和非阻塞I/O操作,提供出色的性能和可伸缩性。
  2. Web应用程序开发:Starlette提供了一套简洁而强大的API,用于处理HTTP请求和构建Web应用程序。它支持路由、请求和响应处理、模板渲染、静态文件服务等功能,使得开发Web应用程序变得简单和高效。
  3. 中间件支持:Starlette具有中间件机制,允许开发人员在请求和响应处理过程中插入自定义的中间件功能。这可以用于身份验证、请求日志记录、异常处理等,以实现更多的自定义和扩展性。
  4. WebSocket支持:Starlette提供了对WebSocket协议的内置支持,使得开发实时通信和长连接应用程序变得简单。它提供了WebSocket路由和事件处理器,方便处理WebSocket连接和消息。
  5. 集成支持:Starlette可以与其他常用的Python库和框架进行集成,如SQLAlchemy、Pydantic、Tortoise ORM等。这使得开发人员能够利用这些库和框架的功能来构建复杂的Web应用程序。

总的来说,Starlette是一个灵活、高性能的异步Web框架,适用于构建现代化的异步Web应用程序和API。它提供了简单而强大的API,同时支持中间件、WebSocket和集成,使得开发人员能够轻松构建高性能的Web应用程序。

Pydantic

FastAPIPydantic 完全兼容,包括基于 Pydantic 的外部库, 例如用于数据库的 ORMs, ODMs。
这也意味着在很多情况下,你可以将从请求中获得的相同对象直接传到数据库,因为所有的验证都是自动的。
反之亦然,在很多情况下,你也可以将从数据库中获取的对象直接传到客户端。同样通过 FastAPI,你可以获得所有 Pydantic 的特性

Pydantic是一个Python库,用于数据验证和解析,它提供了一种简单而强大的方法来定义数据模型和验证输入数据。Pydantic的主要作用包括以下几个方面:

  1. 数据验证和解析:Pydantic允许您定义数据模型,通过对模型进行类型声明和约束来验证输入数据的有效性。它可以自动验证和解析输入数据,确保数据的类型正确、字段存在、值符合规定的约束等。
  2. 数据序列化和反序列化:Pydantic支持将数据模型转换为字典、JSON字符串或其他格式,以便于数据的序列化和反序列化。它提供了简单的API来进行数据的转换,使得在不同的数据格式之间进行转换变得非常方便。
  3. 输入数据的自动转换和默认值:Pydantic可以根据定义的数据模型,自动将输入数据转换为指定的类型。它还支持在数据模型中为字段设置默认值,以便在缺少输入数据时提供默认值。
  4. 文档生成和API验证:Pydantic可以通过数据模型生成文档,包括字段的类型、约束和默认值等。这对于自动生成API文档和验证API请求和响应非常有用。
  5. 数据模型的嵌套和继承:Pydantic支持数据模型之间的嵌套和继承关系,使得可以构建复杂的数据结构和模型。这使得数据的组织和管理更加灵活和可扩展。

总的来说,Pydantic是一个用于数据验证和解析的Python库,可以帮助您定义数据模型、验证输入数据的有效性,并提供数据的序列化和反序列化功能。它简化了数据处理的过程,提供了一种简单而强大的方式来处理和验证数据。在Web开发、数据处理和API开发中,Pydantic经常被用于数据验证、表单处理和API输入输出的处理。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决Win11突然WiFi消失问题

最近受到很多win11重启或者更新后导致WiFi消失的用户反馈。 初步分析原因:WiFi网卡可能受到天气变冷影响.Win11新更新对驱动存在bug导致。 解决办法: 1.选中桌面此电脑图标.鼠标右键-管理。 2.设备管理器-网络适配器-卸载所有网卡驱动(注意&a…

Vue3速成

文章目录 day 11. 创建vue3工程3. 响应式数据4. 计算属性 day 25. watch 监视6. watchEffect7. 标签的ref属性8. 回顾TS中的接口_泛型_自定义类型 day 1 1. 创建vue3工程 相关代码如下: ## 创建vue工程 npm create vuelastest## 安装node_modules npm install //…

Ubuntu服务器fail2ban的使用

作用:限制ssh远程登录,防止被人爆破服务器,封禁登录ip 使用lastb命令可查看到登录失败的用户及ip,无时无刻的不在爆破服务器 目录 一、安装fail2ban 二,配置fail2ban封禁ip的规则 1,进入目录并创建ssh…

diskMirror-backEnd-spring-boot | diskMirror 后端服务器 SpringBoot 版本!

diskMirror-backEnd-spring-boot 开源技术栏 diskMirror 后端服务器 SpringBoot 版本! 此版本中拓展了 DiskMirrorBackEnd,是一个完全的SpringBoot项目! 目录 diskMirror-backEnd-spring-boot 目录我如何使用? 部署与配置我如何使用其中的…

【LeetCode刷题】146. LRU 缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -…

JVM 第二部分-3(对象,直接内存)

对象 对象的实例化 创建对象的方式 new 对象 变形1:使用类的静态方法获得对象变形2:xxxBuilder、xxxFactory的静态方法 反射 Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是publicConstructor的ne…

文献速递:帕金森的疾病分享--多模态机器学习预测帕金森病

文献速递:帕金森的疾病分享–多模态机器学习预测帕金森病 Title 题目 Multi-modality machine learning predicting Parkinson’s disease 多模态机器学习预测帕金森病 01 文献速递介绍 对于渐进性神经退行性疾病,早期和准确的诊断是有效开发和使…

Thumbnailator简介和示例

背景 对于javaweb服务端开发人员,图片资源的管理总是绕不开的一环。很多网站上都会提供上传图片这个功能,而现代数码设备拍摄出来的都是高清图片,分辨率很高,占用的空间也很大。物理存储的问题还算容易解决,但是网络带…

maven的私服

什么是maven的私服就是把自己写的工具类共享给别人这样大家都能用到你写的工具类不用重复写提示效率 maven的上传与下载示意图 1.什么是发行版本?发行版本指定的是功能稳定可以共大家使用的版本 2.什么是快照版本?快照版本指定的是指正在开发的版本 3…

[⑥5G NR]: 无线接口协议,信道映射学习

5G系统整体包括核心网、接入网以及终端部分,接入网与终端间通过无线空口协议栈进行连接。无线接口可分为三个协议层:物理层(L1)、数据链路层(L2)和网络层(L3)。 L1:物理…

【数据结构】:单链表之头插法和尾插法(动图+图解)

头插法和尾插法 一、头插法💤思考一:头插法的核心是什么❓❗❗ 重点一:以带头结点方式实现头插法❗❗ 重点二:以不带头结点方式实现头插法 二、尾插法💤思考二:尾插法的核心是什么❓❗❗ 重点三&#xff1a…

PostgreSQL中int类型达到上限的一些处理方案

使用int类型作为表的主键在pg中是很常见的情况,但是pg中int类型的范围在-2147483648到2147483647,最大只有21亿,这个在一些大表中很容易就会达到上限。一旦达到上限,那么表中便没办法在插入数据了,这个将会是很严重的问…

k8s分布式图床(k8s,metricsapi,vue3+ts)

image-manage 图像管理应用 图像管理应用提供了一个方便管理图片的平台,支持单机和Kubernetes集群部署。请确保您至少拥有一个MySQL数据库和一个Redis数据库,以及一个至少为Kubernetes 1.29版本的集群(如果选择集群部署)。 文档…

Linux开发工具vim

目录 1. vim的基本概念2. vim的基本操作3. vim正常模式命令集1. 插入模式2. 从插入模式切换为命令模式3. 移动光标4. 删除文字5.复制6. 替换7. 撤销上一次操作8. 更改9. 跳至指定的行 4. vim末行模式命令集1. 列出行号2. 跳到文件中的某一行5. 查找字符6. 保存文件7. 离开vim 1…

Java多线程导出Excel示例

在之前的Java多线程导入Excel示例中演示了如何通过多线程的方式导入Excel,下面我们再来看下怎么通过多线程的方式导出Excel 还是直接上代码 首先是Controller import com.sakura.base.service.ExcelService; import org.springframework.beans.factory.annotation.…

【数据分享】2000~2023年MOD15A2H 061 光合有效辐射分数FPAR数据集

​各位同学们好,今天和大伙儿分享的是2000~2023年MOD15A2H 061 光合有效辐射分数FPAR数据集。如果大家有下载处理数据等方面的问题,可以评论或私信。 Myneni, R., Y. Knyazikhin, T. Park. MODIS/Terra Leaf Area Index/FPAR 8-Day L4 Global 500m SIN G…

网络工程师笔记6

ICMP协议 Internet控制报文协议ICMP(InternetControlMessage Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。使用基于ICMP的应用时,需要对ICMP…

live555源码学习(1)

1 基础组件 live项目主要包含了四个基础库、程序入口类(mediaServer)和测试程序(testProgs)。四个基础库是UsageEnvironment、BasicUsageEnvironment、groupsock和liveMedia UsageEnvironment 抽象了两个类UsageEnvironment和T…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的钢材表面缺陷检测系统(Python+PySide6界面+训练代码)

摘要:开发钢材表面缺陷检测系统对于保障制造质量和提高生产效率具有关键作用。本篇博客详细介绍了如何运用深度学习构建一个钢材表面缺陷检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5&#…

Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读

Grid-Based Continuous Normal Representation for Anomaly Detection 论文阅读 摘要简介方法3.1 Normal Representation3.2 Feature Refinement3.3 Training and Inference 4 实验结果5 总结 文章信息: 原文链接:https://arxiv.org/abs/2402.18293 源码…