大家好,我是锋哥,就在刚刚,锋哥把FastAPI python web开发技术课程更新完了。一共14讲。

FastAPI视频教程B站更新地址:
https://www.bilibili.com/video/BV1hj756zEED/
FastAPI是一个现代、高性能的Python Web框架,专为构建API而设计。它基于标准的Python类型提示(Type Hints)构建,自2018年底由Sebastián Ramírez(塞巴斯蒂安·拉米雷斯)发布以来,已成为Python生态中发展最快的框架之一。
FastAPI的官方网站是:https://fastapi.tiangolo.com
网站提供多语言支持,中文文档的入口是:https://fastapi.tiangolo.com/zh/


高清视频+源码+领取。
扫描下方公众号【python222】回复:888,
可获取下载链接
👇👇👇
👆长按上方二维码 2 秒 回复「888」即可获取
后续还要安排一个FastAPI实战课程 - 基于LangChain的带AI智能客服的微信小程序商城系统(RAG+FastAPI+Vue3) Python Agent VIP项目实战。如需购买锋哥的Python VIP,可以提早下手。
2026年,锋哥又开始收Python+AI大模型学员了!目前活动,送AI编程+Java编程 VIP
FastAPI的核心设计目标是解决传统框架(如Flask、Django)在异步支持、开发效率和性能上的痛点,其主要优势体现在以下几个方面:
🚀 高性能 (High Performance):FastAPI的性能与NodeJS和Go等语言编写的框架相当,是Python中最快的框架之一。这得益于其底层基于Starlette(ASGI框架)和Pydantic(数据验证库)。在TechEmpower的基准测试中,其性能远超Flask和Django。
⚡️ 极速开发 (Fast to Code):官方估计,使用FastAPI开发功能的速度能提升约200%到300%。这主要归功于其高度依赖类型提示的特性,减少了大量样板代码。
🐛 更少错误 (Fewer Bugs):借助类型提示和Pydantic的自动数据验证,FastAPI能减少约40% 由开发者引起的人为错误。
📖 自动生成文档 (Automatic Documentation):这是FastAPI最受欢迎的特性之一。它基于OpenAPI标准,能自动为你的API生成交互式文档。文档支持 Swagger UI 和 ReDoc 两种界面,你可以在浏览器中直接调用和测试API。
🧩 强大的依赖注入系统 (Dependency Injection):FastAPI包含一个极其易用但功能强大的依赖注入系统。依赖项本身也可以有依赖项,形成一个层次结构或依赖图,这一切都由框架自动处理,这有助于保持代码的模块化和可测试性。
🔐 内置安全功能 (Security):内置了对OAuth2、JWT(JSON Web Tokens) 等安全认证机制的支持。
FastAPI的强大并非凭空而来,它巧妙地站在了巨人的肩膀上:
Starlette:一个轻量级的ASGI(异步服务器网关接口) 框架,为FastAPI提供了强大的异步Web工具支持。
Pydantic:一个数据验证和设置管理的库,它利用Python类型提示进行数据验证、序列化和反序列化。
凭借其高性能和开发效率,FastAPI特别适合以下场景:
构建高并发API服务,例如支付网关、实时数据推送服务。
作为微服务架构中的核心组件。
为机器学习模型提供高性能的API服务接口。
开发需要WebSocket实时通信的应用。
| 对比维度 | FastAPI | Flask | Django |
|---|---|---|---|
| 框架类型 | 现代异步 Web 框架(偏向 API 开发) | 微框架(Micro-framework) | 全能型(Batteries-included)全栈框架 |
| 底层协议 | ASGI(原生异步非阻塞) | WSGI(同步阻塞,异步需额外借助 Quart 等) | WSGI(主流),现已部分支持 ASGI(Django 3.1+) |
| 性能/速度 | 极高(Node.js/Go 级别) | 中等 | 相对较低(受限于同步架构和庞大的内置组件) |
| 数据验证 | 原生支持(基于 Pydantic,自动校验、序列化) | 需借助第三方库(如 Marshmallow、Pydantic) | 通过 Forms 或 DRF(Django REST Framework)序列化器 |
| ORM / 数据库 | 无内置 ORM,需自行集成(SQLAlchemy 等) | 无内置 ORM,需自行集成(SQLAlchemy 等) | 内置强大 ORM(自带迁移、关联查询、聚合等) |
| API 文档 | 自动生成(内置 Swagger UI 和 ReDoc,开箱即用) | 需手动配置或使用扩展(如 Flasgger) | 核心无,需借助 DRF 的 drf-yasg 或 Spectacular 生成 |
| 后台管理 | 无,需自行开发或集成(如 SQLAlchemy Admin) | 无,需自行开发(如 Flask-Admin) | 内置 Admin 后台(增删改查开箱即用,功能极强) |
| 模板引擎 | 无(推荐作为纯后端 API 使用,可集成 Jinja2) | 内置 Jinja2(渲染 HTML 页面非常方便) | 内置 Django Template(功能完善,自带标签/过滤器) |
| 依赖注入 | 原生支持(Dependency Injection 机制优雅) | 需手动实现或借助扩展 | 无原生概念,需手动解耦或借助第三方库 |
| 学习曲线 | 中等(需熟悉 Python 类型提示和异步基础) | 低(路由和视图简单直观,2小时入门) | 较高(概念极多:MTV、中间件、信号、Form、Admin 等) |
| 项目结构 | 高度自由,开发者自行设计 | 高度自由,非常灵活 | 强约束(约定大于配置,目录和命名规范严格) |
| 生态与扩展 | 较新但增长迅猛,生态围绕异步库(HTTPX、SQLAlchemy Async) | 生态极其丰富,历经时间考验,扩展极多 | 生态极其丰富,“万物皆可插”,三方库/中间件海量 |
| 适用场景 | 高并发 API 服务、微服务架构、实时聊天/流式响应、前后端分离项目 | 小型项目、简单 Web 页面、快速原型验证、轻量级 API | 大型企业级 Web 应用、内容管理系统(CMS)、电商后台、自带后台管理需求的快速开发 |
首先磁盘里先新建一个空项目目录fastapi_pro

然后打开PyCharm,点New Project,左侧选FastAPI,定位fastapi_pro目录,以及选虚拟环境,Python版本11,最后点Create创建项目。

目录结构:左侧venv是虚拟环境,包括配置和第三方库,main.py是项目启动入口文件,test_main是项目测试文件。

我们点击右上角 绿色 三角形 启动项目

接着控制输出,启动成功。
点击按钮运行,相当于执行了 python.exe -m uvicorn main:app --reload

我们点击 http://127.0.0.1:8000/链接测试,说明测试成功。

我们来解释下 python.exe -m uvicorn main:app --reload
这个命令是用Python模块方式启动Uvicorn服务器,来运行一个名为main.py文件里的FastAPI(或任意ASGI)应用,并开启了热重载功能。它是在Windows环境下开发调试时最常用的启动方式。
我们可以把这条命令拆解成5个部分来理解:
python.exe
这是Python解释器的可执行文件。在Windows系统中,.exe后缀明确指定了要运行的程序。如果你在macOS或Linux上,通常只需要输入python或python3。
-m
这是Python的命令行选项,全称是 “module”(模块)。它的作用是告诉Python:“不要执行一个脚本文件,而是去执行一个库(模块)”。它会去Python的安装路径下寻找名为uvicorn的文件夹,并运行里面的__main__.py文件。
对比一下:
不加-m,通常需要写完整路径,比如python C:\path\to\uvicorn\__main__.py ...。
加了-m,Python会自动帮你在sys.path(系统路径)中搜索这个模块,用起来更简洁、更标准。
uvicorn
这是要运行的模块名称。当Python收到-m uvicorn时,它会去执行Uvicorn库的入口代码,相当于启动了这个Web服务器程序。
main:app
这是告诉Uvicorn具体要去启动哪个应用,它由两部分组成,用冒号:隔开:
main:指的是main.py这个Python文件名(注意,不需要加.py后缀)。
app:指的是main.py文件中创建的应用实例变量。在FastAPI中,通常是app = FastAPI()这行代码创建的对象。
如果你的文件名是server.py,实例叫application,这里就要改成server:application。
--reload
这是一个开关参数,意为“重载”。当加上它后,Uvicorn会监听项目目录下的所有Python文件变化。
作用:当你修改了main.py或其他导入的代码并保存文件时,Uvicorn会自动检测到变动,并优雅地关闭旧进程、启动新进程。
适用场景:仅在开发调试阶段使用,能极大提升开发效率,省去手动重启服务器的麻烦。
警告:在生产环境(线上服务器)绝对不要加这个参数,因为文件监听会消耗大量服务器资源,且自动重启可能导致服务中断或状态丢失。
这里自动重载很有用,我们平时开发,经常改代码,加了 --reload,自动冲重新加载,就不用每次点重启按钮了。
比如我们修改下代码,

修改代码后,自动重启项目:

当然 我们还可以在终端里启动,启动命令 uvicorn main:app --reload
效果和前面一样。
