【Python】一文带你认识 Web 框架之 FastAPI

news2025/1/11 18:35:22

 

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?type=blog个人简介:打工人。

持续分享:机器学习、深度学习、python相关内容、日常BUG解决方法及Windows&Linux实践小技巧。

如发现文章有误,麻烦请指出,我会及时去纠正。有其他需要可以私信我或者发我邮箱:zhilong666@foxmail.com 

 

 

目录

一、简介

二、发展史

三、主要功能

FastAPI 有以下主要优势:

FastAPI 为我们提供了以下主要功能:

四、参数详解

五、使用步骤

        第1步:安装 FastAPI

        第2步:安装 uvicorn

        第3步:定义API接口

        第4步:运行 server 

六、示例代码

七、总结


一、简介

        FastAPI是一个现代、快速(高性能)的Web框架,用于构建API,基于Python 3.6+,并使用了标准的Python类型注解(Python 3.5也支持类型注解),以获得交互式API文档(通过OpenAPI/Swagger)和自动验证。 FastAPI是一个Web框架,它与Flask和Django等框架不同。它具有更高的性能和易用性,并提供了最新的标准和技术,例如类型注释、异步编程、请求和响应体(JSON和其他数据格式)的内置验证和文档生成等。

        FastAPI的目标是帮助构建更好的API,尽可能简单而快速,并使API更容易创建和部署。它的设计重点在于提高开发人员的生产力并保持代码清晰和易于理解。这使得FastAPI成为构建精细和高性能API的理想选择。FastAPI的强大功能使得它成为许多Python开发人员的首选框架。

二、发展史

        FastAPI于2019年发布。它是由Sebastian Ramirez创建的,他曾经为12个国家的公司工作,包括伊利诺伊州大学(University of Illinois),Cloudinary,gumgum Inc等等。他还是Pydantic框架的创建者,并成为了多个开源项目的贡献者,例如拖动PDF的pdfkit和 PDFTables等。他是Python开发人员社区活跃分子和会议演讲人,并在Python开发人员社区拥有广泛的联系。

        FastAPI于2019年首次推出,其设计初衷是为了解决Python Web框架在数据类型验证和文档生成方面的问题。与Flask等传统Web框架不同,FastAPI使用了Python类型注解和Pydantic模型,并使用async/await异步语法以提高性能。 FastAPI还支持使用OpenAPI和Swagger进行文档生成,使API整个生命周期更易于管理。

        FastAPI的稳定版本1.0于2020年6月发布。

三、主要功能

FastAPI 有以下主要优势:

  • 快速:极其快速的性能,得益于使用Pydantic、Starlette等技术。
  • 标准:基于标准 Python 类型标注的 Python 3.6+ 代码。
  • 少量代码:通过利用 Python 特性,使代码量最小化。
  • 快速编写:尽可能简单和易于编写的 API 以及自动生成文件的功能。

FastAPI 为我们提供了以下主要功能:

  • 非常快的性能
  • 基于标题和 OAuth2,OpenID Connect 等的身份验证
  • 集成式支持多个 SQL 和 NoSQL 数据库
  • 多模板支持(Pydantic、Multipart Form、Form、JSON、WebSocket、Webhook、GraphQL)
  • 参考文献,并可以自动生成 API 文档
  • 具有 Docker 和 Kubernetes 的现成支持
  • 适用于 JWT,Cookies 等的访问和安全性实用程序
  • Starlette 和 Pydantic 等代码生态系统的集成

四、参数详解

        在 FastAPI 中,我们定义 API 操作的方式与标准 Python 函数相同。在快速定义标识HTTP Request方法和路由的接口时, FastAPI 提供了诸多参数来帮助我们完成不同的处理操作。

        下面是 FastAPI 中常见的参数类型:

  • Query:用于查询参数,它们是GET请求和POST/PUT参数串,直接在URL中的明文传输。
  • Path:用于路径参数。从路径参数和转换后的查询参数中提取数据。
  • Body:用于在请求体中传输的数据,它可以是任何类型,并使用json解析功能进行验证和转换。
  • Form:用于在表单中提交的数据,例如以POST方法提交的HTML表单。
  • File:用于上传文件数据。
  • Header:用于HTTP标头某些参数。(包含Content-Type)等参与逻辑运算授权。
  • Cookie:用于请求中的Cookie。
  • Depends:对于复杂操作,您需要多个方法,它们可能具有依赖项和许多其他细节。依赖项是将函数传递给参数来创建的。

五、使用步骤

        想要使用 FastAPI 开发自己的 Web API,步骤如下:

        确保你已经安装Python3.6及以上版本。

        第1步:安装 FastAPI

        使用下面的命令安装 FastAPI:

pip install fastapi

        第2步:安装 uvicorn

        安装 uvicorn 启动服务器:

pip install uvicorn

        第3步:定义API接口

        以下是 FastAPI 简单的示例代码,定义了一个接口,通过访问“/”路由,返回一个JSON串{"Hello":"World"}:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def index():
    return {"Hello":"World"}

        第4步:运行 server 

         使用以下命令启动服务:

uvicorn main:app --reload

# 此处请把main改为你代码启动主文件名

        到这里,咱们就可以通过访问http://127.0.0.1:8000/ping来测试API接口是否可用。 

六、示例代码

        首先,我们需要创建一个名为“main.py”的文件并导入 FastAPI。

from fastapi import FastAPI

# 初始化 FastAPI
app = FastAPI()

        接下来,我们将定义一个可获取的路由,可以使用浏览器或者cURL访问该路由。 

@app.get("/users")
async def get_users():
    return {"users": []}

        现在,如果通过浏览器访问上面的URL,应该会得到一个JSON格式的响应。

        最后,我们需要启动服务器并监听请求。为此,可以使用Uvicorn命令行工具。

uvicorn main:app --reload 

        现在API运行并监听端口8000。打开浏览器访问“http://localhost:8000/users”返回“{“users”: []}”。 

七、总结

        FastAPI是一款适合构建高性能、易用、易扩展的web框架,它广泛应用于Python web服务开发和微服务架构中。FastAPI具有强大的文档整合与代码完整性,追求代码简洁与易读性,具有较好的网站性能和响应速度。它还提供多种参数类型,可以有效地验证输入和请求。FastAPI还内置了Swagger UI界面,可以自动生成API文档,让API管理变得简单易用。但是FastAPI增加的代码量会在初学者中引起烦恼,因为新增的注释使得操作变得稍微有些复杂。但是对于有一定开发经验的开发者来说,这一点难度也很容易被克服,FastAPI已经成为开发Python Web应用程序和微服务的首选框架之一。

 

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

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

相关文章

TI DSP芯片C2000系列读取FLASH数据

本文记录如何读取TI芯片的flash数据 进入TI官网下载UNIFLASH工具 点击查看详情 点击下载选项,根据系统下载对应版本 下载完成之后,点击安装。安装完成之后双击图标点开。如果你的板子已经供电,且编程器已经连接好,UNIFLASH会自动…

使用C++处理一行输入未知个数的字符的问题

今天分享一下使用C处理一行输入未知个数的字符的问题。 一,问题描述 在一行输入未知个数字符,以回车结束输入。 二,分析问题 第一种方式使用String类型,直接读入一串字符,这种方法简单高效。第二种方式一个一个字符…

HCIA-DHCP,FTP,Telnet

目录 DHCP: DHCP的优点: DHCP的工作原理 DHCP的配置 DHCP全局地址池案例: FTP FTP介绍 FTP基本配置 Telnet Telnet的应用场景 Telnet设备配置 Telnet配置案例 DHCP: 解决传统手工配置IP的问题,可以实现IP的…

Openlayers优化加载地图瓦片太慢的问题,Openlayers瓦片缓存实现和请求失败瓦片重试功能

专栏目录: OpenLayers入门教程汇总目录 前言 Openlayers默认加载地图瓦片很慢,通过对比使用openlayers和leaflet加载速度,能够明显看到openlayers加载速度比leaflet要慢很多。 通过Openlayers源码发现是因为Openlayers的瓦片加载机制是通过tileQueue瓦片加载队列来顺序加载…

变电所运维云平台在电力系统中的应用

安科瑞虞佳豪 变电所运维云平台可以看做是电力监控系统的网络应用延伸,变电所运维云平台通过互联网,电力运维人员通过手机可以随时随地了解工厂配电系统的运行情况,做到无人值守或者少人值守,同时可以监测用能状况、漏电、线缆异…

基于图像识别框架Airtest的Windows项目自动化测试实践

写在前面 本次分享的内容是基于Airtest实现Windows应用的自动化测试,内容大纲: Airtest框架介绍:Airtest适用项目、Airtest特点、Airtest的优势 Airtest框架组成、原理 Airtest环境搭建及IDE的简单使用 Airtest开展Windows应用自动化测试实…

Navicat恢复数据库连接及查询sql的解决办法

文章目录 如题一. 恢复Navicat数据库连接信息注册表编辑工具 二. 恢复Navicat每个数据库的sql文件等 如题 因为公司给电脑加域,导致使用新的用户账户,原先的很多配置都失效了,本篇是讲述一下如何恢复数据库连接工具Navicat的连接数据。 一.…

300多个日夜的付出,从外包跑路的我,上岸阿里,没人知道我经历了什么

前言: 没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力幸运,但如果你不够幸运,那就只能拉高努力的占比。 2023年5月,我有幸成为阿里的一名自动化测试工程师&#xff…

RTSP/Onvif协议安防视频平台EasyNVR服务频繁重启是什么原因?

EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议,将前端接入设备的音视频资源进行采集,并转码成适合全平台、全终端分发的视频流格式,包括RTSP、RTMP、FLV、HLS、WebRTC等格式。平台可拓展性强、部署轻快,在安防监控领域有着广泛…

MVVM (Model-View-ViewModel Pattern)

MVVM 模式中有三个核心组件:模型、视图和视图模型。 每个组件的用途不同。 下图显示了这三个组件之间的关系。 在交互层次上,视图“了解”视图模型,视图模型“了解”模型,但模型不知道视图模型,而视图模型不知道视图。…

链表内指定区间反转

题目: 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。 例如: 给出的链表为 1→2→3→4→5→NULL,m2,n4 返回 1→4→3→2→5→NULL 数据范围&#xff…

日常开发中,提升技术的13个建议

前言 1. 打好基础,深入学习语言特性 比如,对于Java程序员来说,要了解Java语言的基本概念和核心特性,包括面向对象编程、集合框架、异常处理、多线程等等。可以通过阅读Java的官方文档、教程、参考书籍或在线资源来学习。 如果最基本的基础都不扎实&…

OOM 如何监控可视化、告警推送、服务自愈

OOM,out of memory,就是内存用完了耗尽了的意思。会触发kernel调用OOM killer杀进程来解除这种状况。 OOM分为虚拟内存OOM和物理内存OOM,两者是不一样的。 虚拟内存OOM发生在用户空间,用户空间分配的就是虚拟内存,不…

【裸机驱动LED】使用汇编代码驱动LED(四)—— 驱动格式开发篇

上一篇使用C语言代码来驱动LED,之前我们是手动设置的每一个寄存器的地址,但是这样的效率太低,而且很麻烦。此时我们注意到同属于 GPIO_CCGRx 这一类的寄存器地址,他们之间都相差 4 个字节。 我们要利用这一特性,将之前…

SciencePub学术 | 【CCF推荐】计算机决策类重点SCIEI征稿中

SciencePub学术 刊源推荐: 【CCF推荐】计算机决策类重点SCI&EI征稿中!信息如下,录满为止: 一、期刊概况: CCF推荐|计算机决策类重点SCI&EI 【期刊简介】IF:3.5-4.0,JCR2区,中科院3/4区…

OpenCV 数据类型及赋值取值

在之前的博客 OpenCV 32F 与 8U Mat数据类型相互转换(C版) 已经提到,OpenCV Mat 类型及对应编号,如下表: 其中C1~C4为通道数,经常使用的数据类型对应如下表所示: 其中: FLT_MAX 3.402823466e38 FLT_MIN …

从亿点点失误,到一点点失误,我是如何做的【工作失误怎么办】

前言 只要我们还在做事,或者说还活着,就没有不犯错的时候。作为一名前端搬砖工,哪怕工作中再仔细小心,也免不了一些失误。 那这是不是说,失误很正常,改了就是嘛? 这么说好像没错。作为失误本…

[Java基础]面向对象-内存解析

因为内存解析篇幅较长,我们单独拿出来讲解。 我们知道,方法执行,其实就对内存的操作,但具体是如何进行的呢?下面我们以生成“圆”为例,从内存的角度解析程序执行过程。 /** * 圆 **/ public class Circle…

5年测试面试要20K,面试三个问题把我打发走了···

都说金三银四,金九银十跳槽涨薪季,我是着急忙慌的准备简历——5年软件测试经验,可独立测试大型产品项目,熟悉项目测试流程…薪资要求?5年测试经验起码能要个20K吧。 我加班肝了一页半简历,投出去一周&…

22种不同的社交媒体内容类型(2023年指南)

您是否觉得自己的社交媒体帖子陷入了无休止的循环?您是否已经无话可说并且感到厌烦了?看起来你没有得到任何牵引力吗? 别担心 — 这些感觉在营销人员和小企业主中很常见。今天,我们将探索社交媒体内容的世界,并为您提…