2.4.3重用逻辑并使用继承避免重复33
2.5使用mypy进行类型提示和类型检查36
2.5.1开始36
2.5.2typing模块37
2.5.3可调用的类型函数签名39
2.5.4Ang和cast40
2.6异步I/O41
2.7总结44
第3章使用FastAPI开发RESTfulAPI45
3.1技术要求45
3.2创建第一个端点并在本地运行45
3.3处理请求参数48
3.3.1路径参数48
3.3.2查询参数53
3.3.3主体数据54
3.3.4表单数据和文件上传58
3.3.5Header和Cookie62
3.3.6请求对象64
3.4自定义响应65
3.4.1路径操作参数65
3.4.2响应参数69
3.4.3引发HTTP错误73
3.4.4构建自定义响应75
3.5使用多个路由器构建一个更大的项目78
3.6总结81
目录PythonFastAPI构建数据科学应用第4章在FastAPI中管理Pydantic数据模型82
4.1技术要求82
4.2使用Pydantic定义模型及字段类型82
4.2.1标准字段类型83
4.2.2可选字段和默认值87
4.2.3字段验证88
4.2.4动态默认值89
4.2.5使用Pydantic类型验证邮件地址和URL90
4.3使用类继承创建模型变量92
4.4使用Pydantic添加自定义数据验证94
4.4.1在字段级别上应用验证94
4.4.2在对象级别上应用验证95
4.4.3在Pydantic解析之前应用验证96
4.5使用Pydantic对象96
4.5.1将对象转换为字典97
4.5.2从子类对象创建实例98
4.5.3使用部分实例更新一个实例100
4.6总结101
第5章FastAPI中的依赖注入102
5.1技术要求102
5.2什么是依赖注入102
5.3创建和使用函数依赖项103
5.4创建和使用具有类的参数化依赖项107
5.5在路径、路由器和全局级别使用依赖项110
5.5.1在路径装饰器上使用依赖项110
5.5.2在整个路由器上使用依赖项111
5.5.3对整个应用程序使用依赖项112
5.6总结114
第二部分使用FastAPI构建和部署完整的Web后端
第6章数据库和异步ORM117
6.1技术要求117
6.2关系数据库和NoSQL数据库118
6.2.1关系数据库118
6.2.2NoSQL数据库119
6.2.3选择最佳数据库120
6.3使用SQLAlchemy与SQL数据库通信121
6.3.1创建表架构122
6.3.2连接到数据库123
6.3.3进行插入查询124
6.3.4进行选择查询125
6.3.5进行更新和删除查询127
6.3.6添加关系128
6.3.7用Alembic建立数据库迁移系统131
6.4使用TortoiseORM与SQL数据库通信135
6.4.1创建数据库模型135
6.4.2设置Tortoise引擎137
6.4.3创建对象138
6.4.4获取和过滤对象139
6.4.5更新和删除对象140
6.4.6添加关系141
6.4.7用Aerich建立数据库迁移系统144
6.5使用Motor与MongoDB数据库通信146
6.5.1创建与MongoDBID兼容的模型146
6.5.2连接到数据库147
6.5.3插入文档148
6.5.4获取文件149
6.5.5更新和删除文档151
6.5.6嵌套文档152
6.6总结153
第7章FastAPI中的管理认证与安全性154
7.1技术要求154
7.2FastAPI中的安全依赖关系154
7.3在数据库中安全地存储用户及其密码157
7.3.1创建模型和表158
7.3.2哈希密码159
7.3.3实施注册路线159
7.4检索用户并生成访问令牌160
7.4.1实现数据库访问令牌(accesstoken)160
7.4.2实现登录端点161
7.5使用访问令牌保护端点164
7.6配置CORS并防止CSRF攻击165
7.6.1在FastAPI中进行配置CORS166
7.6.2实现doublesubmitCookie以防止CSRF攻击171
7.7总结175
第8章在FastAPI中为双向交互通信定义WebSocket176
8.1技术要求176
8.2了解使用WebSocket进行双向通信的原理177
8.3使用FastAPI创建WebSocket177
8.3.1处理并发性180
8.3.2使用依赖项182
8.4处理多个WebSocket连接和广播消息184
8.5总结190
第9章使用pytest和HTTPX异步测试API191
9.1技术要求191
9.2使用pytest进行单元测试192
9.2.1使用参数生成测试194
9.2.2通过创建fixture重用测试逻辑195
9.3使用HTTPX为FastAPI设置测试工具198
9.4为RESTAPI端点编写测试201
9.4.1为POST端点编写测试202
9.4.2使用数据库进行测试203
9.5为WebSocket端点编写测试209
9.6总结211
第10章部署FastAPI项目213
10.1技术要求213
10.2设置和使用环境变量213
10.3管理Python依赖项217
10.4在无服务器平台上部署FastAPI应用程序220
10.5使用Docker部署FastAPI应用程序223
10.5.1编写Dockerfile223
10.5.2构建Docker映像225
10.5.3在本地运行Docker映像225
10.5.4部署Docker映像226
10.6在传统服务器上部署FastAPI应用程序227
10.7总结228
第三部分使用Python和FastAPI构建数据科学API
第11章NumPy和pandas简介231
11.1技术要求231
11.2NumPy入门231
11.2.1创建数组232
11.2.2访问元素和子数组234
11.3使用NumPy操作数组:计算、聚合、比较236
11.3.1数组的加法和乘法238
11.3.2聚合数组:总和、最小值、最大值、平均值等239
11.3.3数组比较239
11.4pandas入门240
11.4.1使用pandasSeries获取一维数据240
11.4.2使用pandasDataFrame获取多维数据242
11.4.3导入和导出CSV数据244
11.5总结245
第12章使用scikitlearn训练机器学习模型246
12.1技术要求246
12.2什么是机器学习246
12.2.1监督学习与无监督学习247
12.2.2模型验证247
12.3scikitlearn的基础知识249
12.3.1训练模型和预测249
12.3.2使用pipeline链接预处理器和估计器251
12.3.3通过交叉验证验证模型255
12.4使用朴素贝叶斯模型对数据进行分类255
12.4.1原理256
12.4.2使用高斯朴素贝叶斯对数据进行分类256
12.4.3使用多项式朴素贝叶斯对数据进行分类259
12.5使用支持向量机对数据进行分类260
12.5.1原理260
12.5.2支持向量机在scikitlearn中的应用262
12.5.3查找最佳参数263
12.6总结265
第13章使用FastAPI创建高效的预测API端点266
13.1技术要求266
13.2使用Joblib持久化经过训练的模型266
13.2.1抛弃已训练的模型267
13.2.2加载转储模型268
13.3实现高效的预测端点269
13.4使用Joblib缓存结果271
13.5总结275
第14章使用带FastAPI和OpenCV的WebSockets实现人脸实时检测系统277
14.1技术要求277
14.2OpenCV入门277
14.3实现HTTP端点以对单个图像执行人脸检测280
14.4实现WebSocket以对图像流执行人脸检测282
14.5在WebSocket中从浏览器发送图像流284
14.6在浏览器中显示人脸检测结果287
14.7总结290