Skip to content

Commit b228e9e

Browse files
committed
《FastAPI 框架精讲》
1 parent 4875367 commit b228e9e

File tree

11 files changed

+352
-0
lines changed

11 files changed

+352
-0
lines changed

README.md

Lines changed: 352 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,352 @@
1+
## FastAPI 框架精讲
2+
> 整体的介绍 FastAPI,快速上手开发,结合 API 交互文档逐个讲解核心模块的使用
3+
4+
![drf-tutorial](./coronavirus/static/fastapi-tutorial.png)
5+
6+
体验新一代高性能 Python Web 框架,本课程将从 Hellow World 开始引导同学们学习 FastAPI 框架的所有知识点。从框架特性一览,到 ASGI 服务介绍,第三章开始会以全球 COVID-19 感染数据查询为功能场景,依次讲解 FastAPI 的 API 交互文档使用,如何使用 Pydantic 定义和规范数据格式、类型,各种请求参数和验证,Jinja2 模板渲染和 Static 静态文件配置,FastAPI 的响应处理和配置,通过代码示例讲解依赖注入系统的所有知识,数据库配置与 SQLAlchemy 的使用,大型工程应该如何设计目录结构。框架的安全、认证、授权,中间件开发,跨域资源共享的实现,后台任务和测试用例的编写。
7+
8+
9+
10+
### 课程12个核心技术点
11+
12+
1. 了解 FastAPI 框架特性,相对 Django/Flask 的优势
13+
2. Pydantic 定义和规范数据格式、类型
14+
3. 如何定义各种请求参数和验证,包括路径参数、查询参数、请求体、cookie、header
15+
4. Jinja2 模板渲染和 Static 静态文件配置
16+
5. FastAPI 的表单数据处理、错误处理、响应模型、文件处理、路径操作配置等
17+
6. 全面学习 FastAPI 的依赖注入系统
18+
7. FastAPI 的安全、认证和授权,OAuth2 认证和 JWT 认证的实现
19+
8. FastAPI 的数据库配置与 SQLAlchemy ORM 的使用
20+
9. 大型工程应该如何目录结构设计,多应用的文件拆分
21+
10. FastAPI 的中间件开发
22+
11. FastAPI 中跨域资源共享 CORS 的原理和实现方式
23+
12. 如何编写后台任何和测试用例"
24+
25+
26+
27+
### 适合人群
28+
29+
任何想学习Python开发的同学,尤其是需要高效率完成高并发、高性能项目的同学。
30+
31+
32+
33+
### 课程效果展示
34+
35+
1. 简易版前端效果
36+
![drf-tutorial](./coronavirus/static/preview01.png)
37+
2. API交互文档 - **Swagger UI**
38+
![drf-tutorial](./coronavirus/static/preview02.png)
39+
3. 第三章的接口
40+
![drf-tutorial](./coronavirus/static/preview03.png)
41+
4. 第四、五章的接口
42+
![drf-tutorial](./coronavirus/static/preview04.png)
43+
5. 接口的参数、返回的状态码、描述
44+
![drf-tutorial](./coronavirus/static/preview05.png)
45+
6. 接口认证的效果
46+
![drf-tutorial](./coronavirus/static/preview06.png)
47+
7. 第七、八章和`Coronavirus`应用的接口
48+
![drf-tutorial](./coronavirus/static/preview07.png)
49+
8. 城市信息表
50+
![drf-tutorial](./coronavirus/static/preview08.png)
51+
9. 感染数据表
52+
![drf-tutorial](./coronavirus/static/preview09.png)
53+
54+
55+
56+
### 第一章 课程介绍
57+
58+
#### 1.1 课程内容与导学
59+
60+
介绍本课程的学习内容和目标,如何学习本课程,展示最终代码和效果,引导同学们对 FastAPI 框架有一个基本的了解,并能够在课程结束后独立使用 FastAPI 完成 RESTful API 接口开发。
61+
62+
63+
64+
### 第二章 FastAPI介绍和项目准备
65+
66+
#### 2.1 本章导学
67+
68+
图文列举本章节要讲的内容
69+
70+
#### 2.2 为什么新秀 FastAPI 火成这样 ?
71+
72+
介绍 FastAPI 有哪些突出特点,浏览官网文档中的 Feasures 一览
73+
74+
#### 2.3 Django vs Flask vs FastAPI 三框架大拼比
75+
76+
从开发效率、性能测评、框架生态、社区支持、学习难易程度多个角度对比 Django/Flask/FastAPI。性能评测参考https://www.techempower.com/benchmarks/的Web Framework Benchmarks
77+
78+
#### 2.4 Starlette,Pydantic 与 FastAPI 框架是什么关系?
79+
80+
介绍 Starlette 是个什么项目;IDE 开发时 Python 3.5+ 版本的 "type hints" 的好处:简短、直观和标准的 Python 类型声明;介绍 Pydantic 包,FastAPI 项目的开发为什么要使用 Pydantic
81+
82+
#### 2.5 Pydantic 基础教程
83+
84+
边写代码边讲解基本模型及常用方法,递归模型,字段类型,校验,模型类配置
85+
86+
#### 2.6 ASGI 服务 Uvicorn 和 Hypercorn 介绍
87+
88+
讲解什么是 ASGI 服务,介绍部署 FastAPI 项目需要用到的 Uvicorn 或 Hypercorn
89+
90+
#### 2.7 搭建 FastAPI 项目开发环境
91+
92+
使用 Virtualenv 搭建 FastAPI 项目开发环境,安装 FastAPI,Pydantic,Uvicorn 等
93+
94+
#### 2.8 经验分享-Python 项目开发中包的版本问题
95+
96+
基于之前的课程经验,给同学们重点提示 Python 项目开发中包的版本问题,如何阅读报错信息,怎么解决不同依赖包版本不兼容的问题。
97+
98+
#### 2.9 本章小结&下章内容预告
99+
100+
总结本章的知识点,回顾重难点,下章内容预告
101+
102+
103+
104+
### 第三章 请求参数和验证
105+
106+
#### 3.1 本章导学
107+
108+
图文列举本章节要讲的内容
109+
110+
#### 3.2 "hello world" 接口给后端传 COVID-19 感染数据
111+
112+
首先运行一个简单的 FastAPI 程序,实现返回 "hello world" 的接口;进一步,继承 Pydantic 的 BaseModel 规范请求体数据格式和类型,通过查询参数和请求体传递城市、所在国家、是否有感染病例的信息,讲解 FastAPI 框架的基本开发方法,同步和异步函数的编写、装饰器、URL 路由、HTTP 方法
113+
114+
#### 3.3 FastAPI 的 API 交互文档 - Swagger UI 和 ReDoc
115+
116+
接着上一小节开发的接口功能,API 交互文档一览,使用方法介绍;另一个可用的 API 交互文档 ReDoc
117+
118+
#### 3.4 路径参数和数据的解析、验证
119+
120+
路径参数的类型,错误检查,自动填充,数据转换、解析、验证(包括数字大小范围的验证),参数别名,API 交互文档中传参演示
121+
122+
#### 3.5 查询参数和数据的解析、验证
123+
124+
讲解查询参数的传参方式,类型转换,多路径参数和查询参数的使用,必填查询参数;模拟一个能选择数据源,查询今日全球 COVID-19 感染数据的接口
125+
126+
#### 3.6 请求体以及混合参数
127+
128+
用 Pydantic 的 BaseModel 和 Field 类定义请求体数据格式和类型,如何定义多个请求体,请求体和路径参数,查询参数的混合使用;
129+
130+
#### 3.7 如何定义数据格式嵌套的请求体?
131+
132+
通过 Python 类的继承,结合 typing 和 Pydantic 的 Field 类,用嵌套的模型类定义数据格式嵌套的请求体
133+
134+
#### 3.8 额外的参数和数据类型都有哪些?
135+
136+
schema_extra 属性定义额外的参数,其余数据类型一览,如UUID/datetime/frozenset/byetes/Decimal 等
137+
138+
#### 3.9 如何设置 Cookie 参数?
139+
140+
用 FastAPI 的 Cookie 类实现在后端定义 Cookie 的参数
141+
142+
#### 3.10 如何设置 Header 参数?
143+
144+
用 FastAPI 的 Header 类实现在后端定义请求头的参数,请求头参数自动转换功能介绍,请求头参数中重复的 key 如何处理
145+
146+
#### 3.11 本章小结&下章内容预告
147+
148+
总结本章的知识点,回顾重难点,下章内容预告
149+
150+
151+
152+
### 第四章 响应处理和FastAPI配置
153+
154+
#### 4.1 本章导学
155+
156+
图文列举本章节要讲的内容
157+
158+
#### 4.2 响应模型示例精讲
159+
160+
响应模型的声明和调用,response_model 指定默认值或响应模型,response_model_exclude_unset、response_model_include和response_model_exclude 参数含义
161+
162+
#### 4.3 响应状态码和快捷属性
163+
164+
status_code 参数定义,fastapi.status 快捷调用响应状态码属性
165+
166+
#### 4.4 表单数据处理
167+
168+
导入 FastAPI 的 Form 类,代码演示如何定义表单参数
169+
170+
#### 4.5 单文件、多文件上传及参数详解
171+
172+
讲解 File 和 UploadFile 类,及其参数的定义,多文件上传的实现;以解析 COVID-19.csv 文件数据为例
173+
174+
#### 4.6 FastAPI 项目的静态文件配置
175+
176+
CSS/JS/IMAGES 静态文件的配置,项目如何找到 Static 文件夹
177+
178+
#### 4.7 路径操作配置(Path Operation Configuration)
179+
180+
Path Operation Configuration的概念,包括 Response Status Code、Tags、Summary and description、文档描述符、响应描述、Deprecate 参数
181+
182+
#### 4.8 FastAPI 应用的常见配置项
183+
184+
配置 FastAPI 应用的标题、描述、版本,tags 的元数据,自定义 OpenAPI 和文档的 URL
185+
186+
#### 4.9 FastAPI 框架的错误处理
187+
188+
HTTPException 的使用,如何自定义异常处理器;给第六小节开发的 COVID-19 数据查询接口定义异常处理
189+
190+
#### 4.10 本章小结&下章内容预告
191+
192+
总结本章的知识点,回顾重难点,下章内容预告
193+
194+
195+
196+
### 第五章 FastAPI的依赖注入系统
197+
198+
#### 5.1 本章导学
199+
200+
图文列举本章节要讲的内容
201+
202+
#### 5.2 什么是依赖注入系统?
203+
204+
依赖的概率,依赖注入系统的作用,有哪些使用场景
205+
206+
#### 5.3 创建、导入和声明依赖
207+
208+
代码演示如何创建一个依赖,并在其它函数中调用,讲解 FastAPI 对依赖的处理过程
209+
210+
#### 5.4 FastAPI 使用依赖注入的优势
211+
212+
API 交互文档中依赖项的信息,简单使用;FastAPI的兼容性举例说明依赖注入的简单和强大之处
213+
214+
#### 5.5 如何将类作为依赖项?
215+
216+
将前面函数的例子封装成类,举例如何使用类作为依赖项;类型注释与依赖项的区别;依赖类的快捷编写
217+
218+
#### 5.6 子依赖的创建和调用
219+
220+
案例讲解多重(嵌套)依赖的调用,父依赖调用子依赖,子依赖再调用另外的子依赖
221+
222+
#### 5.7 路径操作装饰器中导入依赖
223+
224+
如何在路径操作装饰器中添加多个依赖,依赖的错误、返回值、异常处理
225+
226+
#### 5.8 FastAPI 框架中全局依赖的使用
227+
228+
讲解 FastAPI 框架中全局依赖的使用
229+
230+
#### 5.9 使用 yield 的依赖和子依赖
231+
232+
yield 在依赖函数中的作用,讲解数据库连接的案例
233+
234+
#### 5.10 本章小结&下章内容预告
235+
236+
总结本章的知识点,回顾重难点,下章内容预告
237+
238+
239+
240+
### 第六章 安全、认证和授权
241+
242+
#### 6.1 本章导学
243+
244+
图文列举本章节要讲的内容
245+
246+
#### 6.2 OAuth2、OpenID Connect、OpenAPI 介绍
247+
248+
讲解 FastAPI 提供的 OAuth2 认证,基于 OAuth2 的OpenID Connect;什么是 OpenAPI,定义了哪些安全认证的方案
249+
250+
#### 6.3 OAuth2 密码模式和 FastAPI 的 OAuth2PasswordBearer
251+
252+
OAuth2 密码模式的认证过程, 继承OAuth2PasswordBearer类,使用 OAuth2 的密码模式,在请求头中携带 Authorization: Bearer your_token 实现认证
253+
254+
#### 6.4 基于 Password 和 Bearer token 的 OAuth2 认证
255+
256+
使用 FastAPI 提供的 OAuth2PasswordBearer 类,开发一个使用密码和 Bear token 的 OAuth2 认证模型,讲解认证原理
257+
258+
#### 6.5 开发基于 JSON Web Tokens 的认证
259+
260+
JSON Web Tokens介绍,安装 python-jose 和 passlib,实现 JWT 认证,用户登录后才能查询 COVID-19 感染数据;在 API 交互文档中测试实现效果
261+
262+
#### 6.6 本章小结&下章内容预告
263+
264+
总结本章的知识点,回顾重难点,下章内容预告
265+
266+
267+
268+
### 第七章 FastAPI的数据库操作和多应用的目录结构设计
269+
270+
#### 7.1 本章导学
271+
272+
图文列举本章节要讲的内容
273+
274+
#### 7.2 FastAPI 项目中配置 SQLAlchemy ORM
275+
276+
SQLAlchemy ORM 介绍,FastAPI 项目中如何配置SQLite数据库,应用的文件结构
277+
278+
#### 7.3 SQLAlchemy 开发 COVID-19 模型类
279+
280+
开发 COVID-19 的城市和感染数据模型类,讲解模型类中各字段和字段属性
281+
282+
#### 7.4 使用 Pydantic 建立与模型类对应的数据格式类
283+
284+
对于上一小节开发的城市和感染数据模型类,继承 pydantic.BaseModel 分别开发对应的创建和读取数据的数据格式类
285+
286+
#### 7.5 把创建和查询 COVID-19 数据封装成函数
287+
288+
创建 crud.py 把创建和查询 COVID-19 数据封装成函数,在函数中通过SQLAlchemy ORM实现对SQLite的CRUD操作
289+
290+
#### 7.6 开发 COVID-19 感染数据查询接口
291+
292+
调用上一小节的函数,实现创建城市,查询城市信息和各个城市每日感染病例数据的接口
293+
294+
#### 7.7 Jinja2 模板渲染前端页面
295+
296+
FastAPI 项目中 Jinja2 配置,使用 Jinja2 渲染 COVID-19 查询页面,完成前端页面的开发
297+
298+
#### 7.8 大型工程的目录结构设计 - 应用文件拆分
299+
300+
对于大型项目,很多的应用应该如何组织目录结构;APIRouter 使不同应用文件更加清晰,便于维护
301+
302+
#### 7.9 本章小结&下章内容预告
303+
304+
总结本章的知识点,回顾重难点,下章内容预告
305+
306+
307+
308+
### 第八章 中间件、CORS、后台任务、测试用例
309+
310+
#### 8.1 本章导学
311+
312+
图文列举本章节要讲的内容
313+
314+
#### 8.2 中间件的概念和作用
315+
316+
中间件的概念,对 request 和 response 的处理流程,需要中间件开发的场景
317+
318+
#### 8.3 一个中间件开发示例
319+
320+
使用 app.middleware("http") 装饰器创建一个中间件,在响应头中加上对每个 request 处理时间的键值对,演示response前后的处理
321+
322+
#### 8.4 跨域资源共享 CORS 的原理
323+
324+
域的概念(协议、域名、端口),什么是跨域、跨域资源共享
325+
326+
#### 8.5 FastAPI 的 CORSMiddleware 实现 CORS
327+
328+
讲解 FastAPI 的 CORSMiddleware 开发方法,其支持的参数以及含义
329+
330+
#### 8.6 实现类似 Celery 的后台任务
331+
332+
后台任务的使用场景,开发一个简单的后台任务,通过函数参数或依赖注入导入后台任务
333+
334+
#### 8.7 后台任务更新 COVID-19 数据
335+
336+
先说下 COVID-19 全球数据源的问题,对接https://coronavirus-tracker-api.herokuapp.com/的数据源,后台任务的方式将数据更新到数据表,前端只需要一个点击按钮
337+
338+
#### 8.8 TestClient 编写测试用例
339+
340+
用 FastAPI 的 TestClient 编写3个简单的测试用例,测试上一小节的后台任务接口;讲解测试用例的开发思路
341+
342+
#### 8.9 本章小结
343+
344+
总结本章的知识点,回顾重难点
345+
346+
347+
348+
### 第九章 课程总结
349+
350+
#### 9.1 课程总结
351+
352+
回顾课程内容与重难点,总结经验、心得以及扩展建议。
56.8 KB
Loading

coronavirus/static/preview01.png

61.3 KB
Loading

coronavirus/static/preview02.png

110 KB
Loading

coronavirus/static/preview03.png

122 KB
Loading

coronavirus/static/preview04.png

126 KB
Loading

coronavirus/static/preview05.png

83.4 KB
Loading

coronavirus/static/preview06.png

134 KB
Loading

coronavirus/static/preview07.png

142 KB
Loading

coronavirus/static/preview08.png

238 KB
Loading

0 commit comments

Comments
 (0)