/fastapi_tutorial

本项目是FastAPI Web开发入门 进阶与实战 Web开发技术丛书 FastAPI Web开发入门教程书籍源码

Primary LanguagePythonMIT LicenseMIT

fastapi_tutorial

书籍源码

https://gitee.com/xiaozhong1988/fastapi_tutorial

介绍

本项目是FastAPI Web开发入门 进阶与实战 Web开发技术丛书 FastAPI Web开发入门教程书籍源码,这是一本从实战角度介绍FastAPI web开发的入门与进阶型技术书。本书没有过多的理论介绍,完全从一线工作角度入手,介绍日常web开发需要掌握的相关知识。本书共分为4篇16章:

  • 第一篇是基础篇(1-3、5-8章),主要介绍FastAPI的基础知识,包括FastAPI的基本信息、安装使用、常规操作、中间件、数据库相关内容。作为初学者,掌握这部分内容就可以快速上手使用FastAPI,处理各种日常问题。
  • 第二篇是进阶篇(4、9、13章),主要围绕与FastAPI相关的高级技能展开,包括异常处理、功能扩展、安全认证、性能、测试等相关内容。
  • 第三篇是实战篇(10-12章),主要从案例的角度对FastAPI在典型应用场景中的落地进行分享,包括短链应用、websocket、基于公众号的挂号系统等应用场景。
  • 第四篇是部署篇(14章),这部分重点介绍如何实现FastAPI的自动化部署,这数据高阶人员必备技能。本篇提供了三种自动化部署方式。

数据目录内容

  • 前言

  • 第1章 初识FastAPI1

    • 1.1 FastAPI框架概述1
      • 1.1.1 FastAPI与其他Web框架2
      • 1.1.2 FastAPI的特性2
    • 1.2 异步编程基础4
      • 1.2.1 并发编程机制4
      • 1.2.2 并发与并行5
      • 1.2.3 同步与异步6
      • 1.2.4 阻塞与非阻塞6
    • 1.3 asyncio协程概念7
    • 1.4 asyncio协程简单应用8
  • 第2章 初试FastAPI11

    • 2.1 搭建开发环境11
      • 2.1.1 安装Python语言包11
      • 2.1.2 PyCharm的安装14
      • 2.1.3 PyCharm IDE配置解析器15
      • 2.1.4 PyCharm IDE解析器的切换18
      • 2.1.5 PIP安装源的设置19
    • 2.2 新建FastAPI项目22
      • 2.2.1 新建简单项目22
      • 2.2.2 项目依赖库的安装24
    • 2.3 简单项目介绍27
      • 2.3.1 创建app实例对象27
      • 2.3.2 添加API请求路由注册28
      • 2.3.3 添加后端渲染模板路由29
      • 2.3.4 启动服务运行30
      • 2.3.5 uvicorn参数说明34
      • 2.3.6 查看交互式API文档35
  • 第3章 FastAPI基础入门38

    • 3.1 app应用配置参数详解38
      • 3.1.1 开启Debug模式39
      • 3.1.2 关于API交互式文档参数40
      • 3.1.3 关闭交互式文档访问42
      • 3.1.4 全局routes参数说明42
      • 3.1.5 全局异常/错误捕获43
    • 3.2 API端点路由注册和匹配44
      • 3.2.1 路由节点元数据44
      • 3.2.2 路由URL匹配46
      • 3.2.3 基于APIRouter实例的路由注册48
    • 3.3 同步和异步API端点路由50
      • 3.3.1 同步API端点路由50
      • 3.3.2 异步API端点路由51
    • 3.4 多应用挂载51
      • 3.4.1 主从应用挂载52
      • 3.4.2 挂载其他WSGI应用52
    • 3.5 自定义配置swagger_ui53
    • 3.6 应用配置信息读取55
      • 3.6.1 基于文件读取配置参数55
      • 3.6.2 基于Pydantic和.env环境变量读取配置参数56
      • 3.6.3 给配置读取加上缓存58
    • 3.7 API端点路由函数参数58
      • 3.7.1 路径操作及路径函数59
      • 3.7.2 Path参数59
      • 3.7.3 Query参数63
      • 3.7.4 Body参数67
      • 3.7.5 Form数据和文件处理77
      • 3.7.6 Header参数81
      • 3.7.7 Cookie参数设置和读取83
    • 3.8 请求报文85
      • 3.8.1 Request对象85
      • 3.8.2 更多Request属性信息86
    • 3.9 响应报文87
      • 3.9.1 HTTP状态码分类88
      • 3.9.2 指定HTTP状态码89
      • 3.9.3 使用response_model定义响应报文内容90
      • 3.9.4 Response类型93
      • 3.9.5 自定义Response类型98
    • 3.10 后台异步任务执行99
    • 3.11 应用启动和关闭事件100
  • 第4章 FastAPI异常及错误102

    • 4.1 HTTPException异常103
      • 4.1.1 HTTPException简单源码分析103
      • 4.1.2 HTTPException的使用104
      • 4.1.3 覆盖HTTPException异常处理105
    • 4.2 RequestValidationError错误106
      • 4.2.1 RequestValidationError的使用106
      • 4.2.2 覆盖RequestValidationError错误处理107
    • 4.3 自定义异常108
      • 4.3.1 自定义异常的实现108
      • 4.3.2 自定义内部错误码和异常109
    • 4.4 中间件抛出自定义异常110
  • 第5章 Pydantic数据模型管理113

    • 5.1 Pydantic介绍113
    • 5.2 Pydantic的使用114
      • 5.2.1 模型常见数据类型114
      • 5.2.2 模型参数必选和可选115
      • 5.2.3 模型多层嵌套116
      • 5.2.4 模型对象实例化116
      • 5.2.5 模型对象的转换117
      • 5.2.6 模型对象的复制118
      • 5.2.7 异常信息的捕获119
      • 5.2.8 用Field()函数扩展更多复杂验证120
      • 5.2.9 自定义验证器123
      • 5.2.10 自定义验证器的优先级124
      • 5.2.11 多字段或模型共享校验器125
      • 5.2.12 root_validator根验证器126
    • 5.3 Pydantic在FastAPI中的应用127
      • 5.3.1 模型类和Body的请求127
      • 5.3.2 模型类和依赖注入关系128
      • 5.3.3 模型Config类和ORM转化130
  • 第6章 FastAPI依赖注入机制详解133

    • 6.1 依赖注入框架134
    • 6.2 依赖项及其声明方式139
      • 6.2.1 函数式依赖项140
      • 6.2.2 类方式依赖项142
      • 6.2.3 多个依赖项注入和依赖项传参143
    • 6.3 多层依赖项嵌套注入144
    • 6.4 多个依赖对象注入146
    • 6.5 不同位置上的依赖项146
      • 6.5.1 全局依赖项的注入147
      • 6.5.2 路径操作依赖项的注入148
      • 6.5.3 路由分组依赖项的注入149
  • 第7章 FastAPI中间件151

    • 7.1 HTTP请求中间件151
    • 7.2 @app.middleware装饰器中间件152
    • 7.3 CORSMiddleware跨域中间件155
      • 7.3.1 跨域中间件的使用156
      • 7.3.2 跨域中间件源码分析157
    • 7.4 其他中间件161
      • 7.4.1 HTTPSRedirectMiddleware中间件161
      • 7.4.2 TrustedHostMiddleware中间件162
    • 7.5 自定义中间件164
      • 7.5.1 基于BaseHTTPMiddleware自定义中间件164
      • 7.5.2 日志追踪链路ID165
      • 7.5.3 IP白名单中间件167
      • 7.5.4 基于中间件获取响应报文内容168
  • 第8章 数据库的应用170

    • 8.1 数据库基础170
      • 8.1.1 SQL概述170
      • 8.1.2 SQL数据库170
      • 8.1.3 NoSQL数据库171
    • 8.2 Python操作SQLite数据库171
      • 8.2.1 创建并链接到数据库172
      • 8.2.2 游标对象操作数据172
    • 8.3 ORM操作数据库173
    • 8.4 SQLAlchemy库174
      • 8.4.1 数据驱动异步和同步说明174
      • 8.4.2 SQLAlchemy同步使用方式175
      • 8.4.3 SQLAlchemy异步使用方式179
      • 8.4.4 SQLAlchemy ORM反向生成模型184
    • 8.5 SQLModel库185
      • 8.5.1 SQLModel同步使用方式186
      • 8.5.2 SQLModel异步使用方式188
    • 8.6 在FastAPI中整合异步SQLAlchemy处理190
      • 8.6.1 需求分析和结构规划190
      • 8.6.2 应用配置信息读取191
      • 8.6.3 配置数据库引擎191
      • 8.6.4 使用yield管理会话依赖项192
      • 8.6.5 定义表模型192
      • 8.6.6 表模型CRUD封装193
      • 8.6.7 创建FastAPI实例并完成表创建194
      • 8.6.8 定义对外可见的API195
      • 8.6.9 完善对外可见的API195
      • 8.6.10 Alembic数据库版本管理199
    • 8.7 Redis数据库及aioredis使用201
      • 8.7.1 连接Redis数据库202
      • 8.7.2 Redis客户端对象实例化202
      • 8.7.3 Redis基本缓存的应用203
      • 8.7.4 Redis发布订阅的应用206
      • 8.7.5 Redis分布式锁的应用208
  • 第9章 安全认证机制211

    • 9.1 OpenAPI规范211
    • 9.2 基于标准HTTP的身份验证方案213
      • 9.2.1 HTTPBasic基本认证方案213
      • 9.2.2 HTTPDigest摘要认证方案215
    • 9.3 基于APIKey的特定密钥方案221
    • 9.4 基于OAuth 2的授权机制颁发令牌方案225
      • 9.4.1 JWT组成结构225
      • 9.4.2 JWT应用实践227
      • 9.4.3 OAuth 2参数说明228
      • 9.4.4 OAuth 2主体角色230
      • 9.4.5 客户端模式230
      • 9.4.6 密码模式237
      • 9.4.7 授权码模式243
      • 9.4.8 简化模式253
  • 第10章 短链应用实战254

    • 10.1 应用开发背景254
    • 10.2 应用系统功能需求描述255
    • 10.3 项目代码编写256
      • 10.3.1 项目规划256
      • 10.3.2 应用配置信息读取257
      • 10.3.3 配置数据库引擎257
      • 10.3.4 使用yield管理会话依赖项257
      • 10.3.5 定义表模型258
      • 10.3.6 用户信息表CURD封装259
      • 10.3.7 短链信息表CURD封装260
      • 10.3.8 创建FastAPI实例并初始化表261
      • 10.3.9 创建测试账号262
      • 10.3.10 定义短链重定向接口262
      • 10.3.11 定义短链生成接口263
      • 10.3.12 将子路由添加到根路由并启动服务267
  • 第11章 WebSocket+Vue简易聊天室实战269

    • 11.1 WebSocket简介269
    • 11.2 项目系统描述270
    • 11.3 项目代码编写271
      • 11.3.1 项目代码结构271
      • 11.3.2 前端页面开发272
      • 11.3.3 后端开发280
      • 11.3.4 跨进程WebSocket通信290
  • 第12章 预约挂号系统实战298

    • 12.1 应用开发背景及系统功能需求299
    • 12.2 项目框架结构规划300
    • 12.3 使用路由分组模块化程序301
      • 12.3.1 APIRouter参数说明302
      • 12.3.2 APIRouter路由分组创建303
      • 12.3.3 视图函数绑定303
      • 12.3.4 APIRouter路由分组注册304
    • 12.4 数据表模型设计304
      • 12.4.1 数据库安装304
      • 12.4.2 数据表设计308
      • 12.4.3 模型类逆向生成310
      • 12.4.4 数据库引擎配置313
    • 12.5 后端项目基础框架搭建315
      • 12.5.1 数据库配置315
      • 12.5.2 定制统一API内容规范317
      • 12.5.3 定制全局异常/错误处理320
      • 12.5.4 基于中间件日志记录322
    • 12.6 关键业务API实现334
      • 12.6.1 微信登录授权334
      • 12.6.2 获取首页医院信息337
      • 12.6.3 获取医生列表信息340
      • 12.6.4 获取医生排班信息341
      • 12.6.5 获取排班信息详情345
      • 12.6.6 订单提交并支付346
      • 12.6.7 未支付订单再次支付353
      • 12.6.8 微信支付回调357
      • 12.6.9 历史预约详情列表接口361
      • 12.6.10 其他业务接口说明361
    • 12.7 超时订单处理362
      • 12.7.1 消息队列说明362
      • 12.7.2 AMQP介绍362
      • 12.7.3 本地安装RabbitMQ364
      • 12.7.4 RabbitMQ简单应用369
      • 12.7.5 RabbitMQ死信队列371
      • 12.7.6 订单超时后自动取消的实现373
    • 12.8 同步转异步处理382
      • 12.8.1 asgiref转换库介绍383
      • 12.8.2 asgiref转换库应用383
  • 第13章 基于Pytest的API测试385

    • 13.1 Pytest简单应用385
      • 13.1.1 unittest和Pytest的对比386
      • 13.1.2 pytest.fixture装饰器的使用390
      • 13.1.3 测试配置文件conftest.py395
    • 13.2 用FastAPI进行API单元测试397
      • 13.2.1 基于TestClient的单元测试397
      • 13.2.2 基于Httpx的异步单元测试398
  • 第14章 生产环境部署详解405

    • 14.1 Linux服务器下部署应用程序405
      • 14.1.1 分配具有root权限的普通用户406
      • 14.1.2 Linux系统上安装Python 3406
      • 14.1.3 基于pyenv管理Python版本407
      • 14.1.4 基于pipenv管理虚拟环境410
      • 14.1.5 生成依赖项配置文件412
      • 14.1.6 基于Gunicorn+Uvicorn的服务部署414
      • 14.1.7 基于Supervisor的服务进程管理416
      • 14.1.8 基于OpenResty的反向代理419
      • 14.1.9 PostgreSQL数据库的安装423
    • 14.2 基于SVN自动化部署425
    • 14.3 基于Docker进行服务部署427
      • 14.3.1 Docker的安装和常用命令428
      • 14.3.2 基于Dockerfile构建镜像430
      • 14.3.3 Docker容器化部署与运行432
    • 14.4 Docker下的环境变量433
      • 14.4.1 基于OS标准库433
      • 14.4.2 基于Pydantic中的BaseSettings自动绑定并解析环境变量434
      • 14.4.3 Docker下的环境变量读取434
    • 14.5 基于Docker Compose进行服务编排436
      • 14.5.1 多服务容器独立运行部署436
      • 14.5.2 多Docker容器一键编排部署437
    • 14.6 基于Gogs+Drone进行可持续集成441
      • 14.6.1 通过Gogs搭建自助Git服务441
      • 14.6.2 通过Drone搭建持续集成和持续交付444
  • 第15章 FastAPI实战常见问题454

    • 15.1 依赖注入项的传参454
    • 15.2 自定义插件开发456
      • 15.2.1 插件模板基类的定义456
      • 15.2.2 实现类似Flask钩子事件插件457
    • 15.3 body重复消费引发阻塞问题460
      • 15.3.1 阻塞问题复现460
      • 15.3.2 解决方案462
    • 15.4 全局request变量465
    • 15.5 同步和异步相互转换467
      • 15.5.1 asgiref转换包467
      • 15.5.2 asyncer转换包469
    • 15.6 Model响应报文的排序470
    • 15.7 同步和异步邮件发送471
      • 15.7.1 同步方式472
      • 15.7.2 异步方式474
    • 15.8 基于Jaeger实现分布式链路追踪476
      • 15.8.1 分布式链路追踪的简单定义476
      • 15.8.2 OpenTracing数据模型477
      • 15.8.3 Jaeger介绍478
      • 15.8.4 Jaeger安装和应用479
      • 15.8.5 基于Jaeger SDK实现链路追踪480
      • 15.8.6 FastAPI整合Jaeger SDK482
      • 15.8.7 基于Jaeger SDK的跨服务链路统计486
    • 15.9 基于Sentry实现错误信息收集489
      • 15.9.1 Sentry安装和配置489
      • 15.9.2 FastAPI框架中引入Sentry492

使用说明

  1. 源码对应的书籍相关章节
  2. 下载后,导入相关IDE启动运行即可
  3. 因个人知识及能力游侠,书籍内容难免有误,如遇问题,你可以联系我进行勘误订正。