|
| 1 | +## FastAPI 框架精讲 |
| 2 | +> 整体的介绍 FastAPI,快速上手开发,结合 API 交互文档逐个讲解核心模块的使用 |
| 3 | +
|
| 4 | + |
| 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 | + |
| 37 | +2. API交互文档 - **Swagger UI** |
| 38 | + |
| 39 | +3. 第三章的接口 |
| 40 | + |
| 41 | +4. 第四、五章的接口 |
| 42 | + |
| 43 | +5. 接口的参数、返回的状态码、描述 |
| 44 | + |
| 45 | +6. 接口认证的效果 |
| 46 | + |
| 47 | +7. 第七、八章和`Coronavirus`应用的接口 |
| 48 | + |
| 49 | +8. 城市信息表 |
| 50 | + |
| 51 | +9. 感染数据表 |
| 52 | + |
| 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 | +回顾课程内容与重难点,总结经验、心得以及扩展建议。 |
0 commit comments