新書推薦:
《
不同境遇的36岁:无尽与有限+人生半熟
》
售價:NT$
510.0
《
小时光 油画棒慢绘零基础教程
》
售價:NT$
403.0
《
可控性混乱
》
售價:NT$
301.0
《
篡魏:司马懿和他的夺权同盟
》
售價:NT$
296.0
《
狂飙年代:18世纪俄国的新文化和旧文化(第三卷)
》
售價:NT$
806.0
《
协和专家大医说:医话肿瘤
》
售價:NT$
500.0
《
潜水指南 全彩图解第4版
》
售價:NT$
602.0
《
超大规模集成电路设计——从工具到实例
》
售價:NT$
403.0
|
編輯推薦: |
国内难得的FastAPI书籍,FastAPI是Python技术体系里轻量级Web框架,在异步处理上具有优异的性能表现,是Python下极其优秀的轻量级框架。本书内容编排从易到难,从基础到项目实战,为开发人员提供了完整的学习内容。
|
內容簡介: |
FastAPI是基于Python语言的轻量级、成熟的Web后端开发框架。它除了简单易学、能提供自动生成的API文档外,还有一个重要优点是支持异步技术,其性能可以与NodeJS、GO语言相媲美,为Web项目高并发访问提供了更好的技术选择。另外,FastAPI定位为商业级的前后端分离开发框架,为前端技术提供了简单易用的调用接口。目前,国内外不少互联网企业,都采用该框架作为商业项目开发基础。本书第1部分为基础篇,系统介绍了FastAPI的使用;第2部分为实战篇,通过后端FastAPI框架与前端Vue.js框架的组合,给出了一个商业实战项目案例。
|
關於作者: |
刘瑜,高级信息系统项目管理师,具有20多年C、ASP、BASIC、FoxBASE、Delphi、Java、C#、Python等编程经验,软件工程硕士、硕士企业导师、大数据重点实验室主任。开发过商业项目20余套,承担省部级千万级别项目5个,发表国内外论文10余篇。出版了《战神——软件项目管理深度实战》《NoSQL数据库入门与实践》《Python编程从零基础到项目实战》《Python编程从数据分析到机器学习实践》《算法之美——Python语言实现(微课视频版)》《Python Django Web从入门到项目实战》。
安义,系统架构师,部门经理,具有20多年软件开发经验,主导过多个行业(医疗、教育、互联网、地产、游戏、汽车、餐饮等)的软件系统开发工作。熟悉多种开发语言和开发框架,具有丰富的软件实战经验。曾是腾讯公司负责袋鼠跳跳应用的研发负责人,目前为“三酷猫”团队的软件技术总监。《Python Django Web从入门到项目实战》第二作者。
陈逸怀,温州城市大学教师教学发展中心主任、高级讲师,天津职业技术师范大学教育学博士研究生(自动化教育方向)、硕士生合作导师,软件设计师、技师,中国计算机学会会员,中国创客教育协会理事,温州市计算机学会理事,国家一类职业技能大赛裁判,青少年机器人大赛国家二级裁判,国家职业鉴定高级考评员。主编、副主编相关教材十本,主持并参与厅局级以上课题十余项,发表相关论文十余篇。
喻小菲,专职软件高级工程师,10余年软件项目开发经验,FastAPI专业技术群群主,承担过物联网、游戏、网络安全等10多个商业项目。主要从事Python Web方向的开发工作,对FastAPI、Sanic、Django、Flask等网络框架均有研究,始终追踪Python开发最前沿的发展方向,具有丰富的Python Web开发经验。
|
目錄:
|
第1部分 基础篇
第1章 认识FastAPI 3
1.1 Web基础知识 3
1.1.1 Web简介 3
1.1.2 超文本传输协议基础 7
1.2 初识FastAPI 10
1.2.1 FastAPI简介 10
1.2.2 安装FastAPI 11
1.2.3 验证安装结果 12
1.3 Hello三酷猫 13
1.3.1 第一个程序,Hello三酷猫 13
1.3.2 OpenAPI文档 14
1.3.3 Python中的异步语法 15
1.4 FastAPI框架构成 16
1.4.1 FastAPI框架功能 16
1.4.2 Python类型提示 17
1.4.3 Pydantic框架 21
1.4.4 Starlette框架 24
1.5 PyCharm代码编辑工具 25
1.5.1 PyCharm简介及安装 25
1.5.2 PyCharm常用功能 30
1.6 习题及实验 34
?
第2章 认识请求 35
2.1 请求原理 35
2.2 路径参数 36
2.2.1 简单路径参数 37
2.2.2 有类型的路径参数 38
2.2.3 有类型路径参数的数据验证 38
2.2.4 路由访问顺序 39
2.2.5 使用枚举类型参数 40
2.3 查询参数 42
2.3.1 标准查询参数 42
2.3.2 可选查询参数 43
2.3.3 必选查询参数 44
2.3.4 参数类型转换 45
2.3.5 同时使用路径参数和查询参数 46
2.3.6 案例:三酷猫卖海鲜(一) 47
2.4 请求体 48
2.4.1 定义请求体的数据模型 49
2.4.2 同时使用路径参数、查询参数和请求体 51
2.4.3 可选的请求体参数 54
2.4.4 同时使用多个请求体 56
2.4.5 常规数据类型作为请求体使用 58
2.5 表单和文件 59
2.5.1 表单数据 59
2.5.2 文件上传 60
2.5.3 表单和多文件上传 62
2.6 案例:三酷猫卖海鲜(二) 62
2.7 习题及实验 64
第3章 认识响应 66
3.1 响应原理 66
3.2 响应模型 67
3.2.1 认识响应模型 67
3.2.2 业务数据模型 71
3.2.3 简化数据模型定义 72
3.2.4 使用多个响应模型 73
?
3.3 内置响应类 74
3.3.1 纯文本响应 75
3.3.2 HTML响应 75
3.3.3 重定向响应 77
3.3.4 JSON响应 78
3.3.5 通用响应 79
3.3.6 流响应 80
3.3.7 文件响应 81
3.4 案例:三酷猫卖海鲜(三) 81
3.5 习题及实验 83
第4章 深入请求和响应 84
4.1 在请求中使用类 84
4.1.1 查询参数类 84
4.1.2 路径参数类 90
4.1.3 Cookie参数类 91
4.1.4 Header参数类 93
4.1.5 Field类 95
4.1.6 实现复杂的请求数据模型 97
4.1.7 直接使用请求类 101
4.2 自定义响应返回数据 102
4.2.1 自定义Cookie数据 102
4.2.2 自定义Header数据 103
4.2.3 默认响应状态码 104
4.2.4 自定义响应状态码 105
4.3 异常处理 106
4.3.1 异常类HttpException 106
4.3.2 全局异常处理器 108
4.3.3 内置异常处理器 110
4.4 中间件技术 112
4.4.1 自定义中间件 113
4.4.2 调用CORS中间件 113
4.4.3 调用UnicornMiddleware中间件 115
4.4.4 调用HTTPSRedirectMiddleware中间件 115
4.4.5 调用TrustedHostMiddleware中间件 116
4.4.6 调用GZipMiddleware中间件 118
4.5 案例:三酷猫卖海鲜(四) 118
4.6 习题及实验 120
第5章 依赖注入 121
5.1 依赖注入原理 121
5.2 使用函数实现依赖注入 122
5.3 使用类实现依赖注入 124
5.4 依赖注入的嵌套 125
5.5 在装饰器中使用依赖注入 127
5.6 依赖项中的yield 129
5.7 依赖类的可调用实例 131
5.8 案例:三酷猫卖海鲜(五) 133
5.9 习题及实验 134
第6章 数据库操作 135
6.1 SQLAlchemy基本操作 135
6.1.1 安装和连接 136
6.1.2 定义数据模型 137
6.1.3 定义关联关系 139
6.1.4 CRUD操作 143
6.1.5 直接使用SQL 145
6.2 连接MySQL 146
6.2.1 安装数据库驱动 146
6.2.2 创建项目并连接SQLAlchemy 146
6.2.3 创建SQLAlchemy数据库模型 147
6.2.4 创建Pydantic数据模型 148
6.2.5 实现数据操作 149
6.2.6 实现FastAPI请求函数 151
6.3 连接MongoDB 154
6.3.1 安装MongoDB 155
6.3.2 安装数据库驱动 157
6.3.3 实现MongoDB中的数据操作 158
6.4 连接Redis 160
6.4.1 安装Redis 161
6.4.2 安装数据库驱动 162
6.4.3 实现Redis中的数据操作 163
6.5 案例:三酷猫卖海鲜(六) 165
6.6 习题及实验 167
第7章 安全机制 169
7.1 安全机制基本功能 169
7.2 添加基于OAuth 2的安全机制 171
7.3 实现基于OAuth 2的安全机制 172
7.3.1 创建数据库应用 173
7.3.2 增加注册用户功能 175
7.3.3 生成令牌 178
7.3.4 增加用户登录功能 178
7.3.5 获取当前登录用户数据 180
7.4 习题及实验 182
第8章 异步技术 183
8.1 基本概念 183
8.1.1 进程/线程 183
8.1.2 阻塞/非阻塞 184
8.1.3 同步/异步 185
8.1.4 并发/并行 185
8.1.5 GIL 185
8.2 协程 186
8.2.1 事件循环加回调 186
8.2.2 基于生成器的协程 186
8.2.3 使用yield from 改进协程 187
8.2.4 原生协程 187
8.3 Asyncio库介绍 187
8.3.1 事件循环 188
8.3.2 协程 188
8.3.3 Future对象 189
8.3.4 Task和可等待对象 189
8.4 案例:三酷猫卖海鲜(七) 190
8.5 习题及实验 191
第9章 企业应用架构 193
9.1 应用程序和子应用 193
9.1.1 使用环境变量 193
9.1.2 应用事件处理 197
9.1.3 管理子应用 198
9.1.4 管理外部Web应用 200
9.2 应用模块管理 201
9.2.1 路由类 202
9.2.2 应用目录结构 202
9.3 页面模板技术 204
9.3.1 Jinja2模板入门 204
9.3.2 管理静态文件 206
9.4 案例:三酷猫卖海鲜(八) 207
9.5 习题及实验 210
第10章 测试与部署 211
10.1 测试工具 211
10.1.1 常规测试 211
10.1.2 分离测试代码 214
10.1.3 应用事件测试 215
10.1.4 依赖项测试 216
10.1.5 测试数据库 218
10.1.6 异步测试工具 219
10.2 部署程序 220
10.2.1 virtualenv和pip3 221
10.2.2 部署到Linux服务器 222
10.2.3 部署为后台进程 223
10.2.4 使用代理服务 225
10.3 案例:三酷猫海鲜项目测试 226
10.4 习题及实验 227
?
第2部分 实战篇
第11章 核酸采集平台:功能分析与设计 231
11.1 需求分析 231
11.2 系统设计 232
11.2.1 逻辑架构 232
11.2.2 技术架构 233
11.2.3 数据架构 234
11.3 任务分工 235
第12章 核酸采集平台:后端项目 236
12.1 后端项目环境搭建 236
12.2 后端项目目录结构 236
12.3 后端项目代码实现 238
12.3.1 主文件 238
12.3.2 配置文件 239
12.3.3 数据库引擎 239
12.3.4 登录认证模块 240
12.3.5 预约模块 244
12.3.6 登记模块 247
12.3.7 运行后端项目 250
12.4 后端项目部署 253
12.4.1 准备服务器环境 254
12.4.2 安装数据库环境 254
12.4.3 安装Python环境 255
12.4.4 上传项目文件 255
12.4.5 安装第三方库 255
12.4.6 部署为后台进程 256
12.4.7 验证部署环境 256
第13章 核酸采集平台:前端项目 262
13.1 前端开发环境搭建 262
13.2 管理端项目目录结构 262
13.3 管理端项目代码实现 263
13.4 管理端项目运行与发布 270
13.5 移动端项目目录结构 272
13.6 移动端项目代码实现 273
13.7 移动端运行与发布 275
附录A 在Win 10上安装MySQL数据库 277
附录B Vue.js使用介绍 290
附录C 附赠代码清单 309
后记 314
|
內容試閱:
|
前言
FastAPI轻量级后端技术框架最近两年突然火了起来,主要原因除了受大红大紫的基础语言Python的影响以外,更得益于其独步天下的异步技术,极高的访问响应性能吸引了众多IT人员追逐。作者在Python领域深耕多年,通过一年多的辛苦努力,完成了该书的写作。本书理论与实践结合,写作风格继承了作者刘瑜老师Python系列图书的风格,保证了读者更好的学习体验。
一、本书设计原则
1. 基础知识由浅入深、层层递进
本书充分发挥了刘瑜老师的写作特点,在知识结构的安排和读者体验上,都做了认真考虑、细致雕琢,全书配有丰富的图片、表格、代码、图标提示等,有利于读者阅读和吸收知识。
2. 实战知识直接采用商业项目案例
编程就是一门以实践为主的课程,作为软件领域资深的项目经理、技术总监,安义老师为本书提供了实际商业项目案例,读者从基础知识能一步踏入项目实战环境,具有很高的学习和工作应用价值。多看高手写的代码,可以大幅提高自身的开发技术水平。
3. 一如既往引入“三酷猫”作为故事的主角
刘瑜老师一直认为学习要认真,也需要有点情调,紧松适度是最佳学习状态。“三酷猫”(Three Cool Cats)的原型是电影《八条命》里的那只可爱的猫咪,该电影的主题曲为Three Cool Cats。编程累了,看看电影、听听音乐,不但愉悦了心情,还能促进创新、创意,使自己所编写的软件更具吸引力。所以,本书的主要案例都是使用“三酷猫”作为主角,由它来为大家讲编程故事。
二、学习帮助
1. 免费赠送配套视频
在主要章节提供约10分钟的视频讲解,仅起抛砖引玉的作用。
2. 免费赠送配套的源代码
基础薄弱的读者,对照章节内容,可以利用开发工具先行运行相关代码文件,观看运行结果,然后再理解对应的知识;基础扎实的读者,可以自写代码,然后与本书配套代码进行比对,起到验证作用。
3. 提供QQ群
QQ群作为读者之间交流学习之用。
学习QQ群:221742686(请注意入群提示,一个QQ群满,可以转入新开群)。
教师及项目级别的技术支持QQ群:651064565。
本书所有配套资源可在QQ群里下载,或通过扫描“配套资源”二维码获取。
三、作者介绍
刘瑜,高级信息系统项目管理师,具有20多年C、ASP、BASIC、FoxBASE、Delphi、Java、C#、Python等编程经验,软件工程硕士、硕士企业导师、大数据重点实验室主任。开发过商业项目20余套,承担省部级千万级别项目5个,发表国内外论文10余篇。出版了《战神——软件项目管理深度实战》《NoSQL数据库入门与实践》《Python编程从零基础到项目实战》《Python编程从数据分析到机器学习实践》《算法之美——Python语言实现(微课视频版)》《Python Django Web从入门到项目实战》。
安义,系统架构师,部门经理,具有20多年软件开发经验,主导过多个行业(医疗、教育、互联网、地产、游戏、汽车、餐饮等)的软件系统开发工作。熟悉多种开发语言和开发框架,具有丰富的软件实战经验。曾是腾讯公司负责袋鼠跳跳应用的研发负责人,目前为“三酷猫”团队的软件技术总监。《Python Django Web从入门到项目实战》第二作者。
陈逸怀,温州城市大学教师教学发展中心主任、高级讲师,天津职业技术师范大学教育学博士研究生(自动化教育方向)、硕士生合作导师,软件设计师、技师,中国计算机学会会员,中国创客教育协会理事,温州市计算机学会理事,国家一类职业技能大赛裁判,青少年机器人大赛国家二级裁判,国家职业鉴定高级考评员。主编、副主编相关教材十本,主持并参与厅局级以上课题十余项,发表相关论文十余篇。
喻小菲,专职软件高级工程师,10余年软件项目开发经验,FastAPI专业技术群群主,承担过物联网、游戏、网络安全等10多个商业项目。主要从事Python Web方向的开发工作,对FastAPI、Sanic、Django、Flask等网络框架均有研究,始终追踪Python开发最前沿的发展方向,具有丰富的Python Web开发经验。
四、习题及实验使用说明
本书免费提供配套的习题及实验,提供该部分内容主要为了验证读者学习效果,巩固学习知识,所以值得一做,并且所有习题及实验都提供了标准答案或提示(可通过指定方式获取)。
五、致谢
在本书编写过程中,一直受到全国同行的热情支持和鼓励,尤其是安徽某软件公司的李硕总经理,在百忙之中也参与了技术讨论;另外,在出版过程中得到了华中科技大学出版社张玲老师等的大力支持,在此一并感谢!
本书经过了作者反复检查,受水平所限,仍可能存在纰漏。若读者朋友发现问题,请在QQ群向群主反映,万分感谢!
作者
2022年8月
后记
FastAPI框架是最近几年红火起来的基于Python语言的框架,其最大的特点是采用了异步技术,它是目前性能最好的轻量级Web开发框架之一,为基于网络的快速访问提供了高并发性能。针对高并发的应用,比如物联网或爬虫类应用,FastAPI框架有天生的优势;而Django框架更擅长后台数据的统一管理和相关功能的快速开发。把FastAPI框架用于读写访问的快速处理,把Django框架用于后端数据的统一管理,是一种经典的混合搭配开发模式。对于Django框架,感兴趣的读者可以参考《Python Django Web从入门到项目实战》一书。
另外,FastAPI框架采用了目前主流的前后端分离技术,体现了低耦合的设计思路。
本书最后3章,通过安义老师开发的一款商业软件,详细地介绍了以FastAPI框架为后端,Vue.js框架为前端的经典开发案例,这也是目前主流商业开发模式,值得读者仔细体会,深入研究。读者掌握该开发模式,就可以直接面对商业级别的开发要求,满足实际软件公司应聘等的需要。
FastAPI毕竟是最近几年的新成熟的轻量级技术框架,刘瑜、安义、陈逸怀、喻小菲四位老师在写作和实践过程中也发现FastAPI部分技术的不成熟,尤其是几乎没有后台管理功能,与Django框架相比差距很大。
建议:在具体的商业项目实践中,需要项目经理审慎评估,准确使用Fast API框架的优点,避开其缺点。
作者 2022年春,于天津
第1章 认识FastAPI
在正式使用FastAPI框架编写代码前,需要读者先了解一下Web的一些基础知识。如果没有接触过这些基础知识,则可以在网上搜索这些知识的关键字,如“HTML”,学习它的一些基本功能的使用,这样更有利于本书后续的学习。对于Python语言的掌握是学习本书的前提条件。
本章提供了FastAPI安装、FastAPI框架构成等入门知识,为后续知识的学习提供基本条件。
本书主要通过PyCharm代码开发工具,进行代码编写和调试,所以先要安装该工具,然后掌握该工具基本的使用功能。
本章的主要内容为:
(1)Web基础知识;
(2)初识FastAPI;
(3)Hello三酷猫;
(4)FastAPI框架构成;
(5)PyCharm代码编辑工具。
本节为初学者提供学习FastAPI时需要了解的Web基础知识,以方便后续学习,如果已经具备Web相关基础知识,可以跳过本节,直接学习下节内容。
1.1.1 Web简介
Web(World Wide Web,WWW)翻译为中文叫全球广域网或万维网,俗称网站(WebSite),它是一种基于超文本(Hyper text)、超媒体(Hyper media)、超文本传输协议(HTTP)建立在Internet上的分布式信息服务系统。普通用户可通过浏览器的网址(WebSite Address)访问对应网站。
?
1. 网站
网站为访问者提供各种各样的栏目信息,这些信息在格式上包括了文本、图片、视频、声音、动画等。
如图1.1所示为新浪网站的主界面,为访问者提供了各种各样的栏目信息,如个人内容共享的微博、大量的广告信息等。人们通过电脑上的浏览器(Browser),就可以轻松访问该网站。
作为本书的读者,不是简单地访问一个网站,而是要深入了解网站的技术原理,掌握技术内容,从而学会自己构建网站。
图1.1 新浪网站
(1)超文本。
超文本主要指带有超链接的、特定文本组织格式的电子文档。如网页在显示相应格式内容的同时,可以内嵌其他网页的链接,点一下就可以进入其他网页。
网页的主要超文本格式使用了超文本标记语言(Hyper Text Markup Language,缩写:HTML)。在新浪网站上随意打开一个网页,在其上点击鼠标右键,选择弹出菜单的“查看源代码”选项,就可以看到相应的超文本格式代码,如图1.2所示。
(2)超媒体。
超媒体是超文本和多媒体在浏览器环境下的结合结果,为浏览的网页提供了图片、动画、声音、视频等效果。实现过程就是把上述媒体文件,以超文本指定格式链接到网页上并展现出来。
(3)超文本传输协议。
超文本传输协议是浏览器访问网站的简单的请求、响应协议。通过该协议,实现了从浏览器端发送访问信息到网站,网站再把相应的网页信息发送回浏览器端的信息传输过程。
图1.2 网页上的HTML超文本代码(部分)
在浏览器里通过网址访问网站,实质上是发送HTTP请求。HTTP分9种请求方式,如表1.1所示。
表1.1 HTTP的9种请求方式
序号 请求方式 功能说明
1 GET 请求指定资源地址的网页信息,并返回实体数据
2 HEAD 与GET请求类似,返回的响应中没有具体内容,用于获取响应头数据
3 POST 向指定资源地址提交数据进行处理请求(如提交表单、上传文件)
4 PUT 向指定资源地址上传数据内容(从浏览器端向服务器端传送数据取代指定的文档内容)
5 DELETE 向指定资源地址发送删除资源的请求
6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
7 OPTIONS 获取服务器针对特定资源所支持的HTML请求方法
8 TRACE 回复并显示服务器收到的请求,用于测试和诊断
9 PATCH 是对PUT方法的补充,用来对已知资源进行局部更新
表1.1中最常用的请求方式为GET和POST。
如在新浪网上点击一个网页上的链接,可以看作是一个GET请求方式的发生,它根据HTTP协议去网站获取指定的数据(如另外一个带数据的网页),并把数据返回到浏览器上,通过网页跳转在新页面上显示出来。
又如在新浪登录页面输入用户名、密码后,将此数据提交给网站,这个提交开始的请求方式是POST。提交成功后返回成功状态数据,并转入登录成功的新页面。
2. 网站的构成
网站由一个个网页(Web Page)构成。由此,程序员需要设计各种各样的网页,然后通过网站框架把它们组织起来,供不同的用户使用。
从程序员或网站管理员角度来看,网站分前端和后端。前端就是通过浏览器可以访问的网页功能和内容,主要供网站访问者使用;后端就是信息发布管理系统,包括了登录网站用户信息的管理、使用功能权限的管理、栏目信息的编辑与发布、发布内容的统计、网站访问量统计等。
3. 因特网(Internet)
Internet,也称国际互联网,其将全球各大洲主要网络链接在一起,是提供信息共享与服务的世界上最大的信息资源网络。
Internet主要由通信链路、服务器、域名、路由设备、信息软件(网站、浏览器、通讯社交软件等)、个人终端组成,如图1.3所示。
图1.3 Internet
(1)通信链路包括有线链路、无线链路。有线链路包括国际跨洋海底光缆、国家骨干光纤通道、城市光纤通道、小区楼宇通信线路等;无线链路包括卫星通信链路、无线通讯发送站、家庭无线网络等。这些都是保证数据顺利传输的通信线路。
(2)服务器是用于安装网站等软件系统的专用计算机,也是程序员把开发好的网站进行部署并运行的实际位置。同时服务器用来存储海量的信息数据,包括各种文件、数据库等。另外,DNS(Domain Name Server,域名服务器)服务器提供域名、IP地址转换统一管理功能。
(3)域名(Domain Name)又叫网域,是Internet上由一串用点分隔的名字组成的某一台服务器或服务器组的名称,用于在数据传输时对服务器的定位标识。其格式如下:
www.<用户名>.<二级域名>.<一级域名>
如,新浪的域名为www.sina.com.cn,“www”代表万维网,“sina”为用户名,“com”为二级域名,“cn”为一级域名,它们之间用点号分隔。“com”用于工商金融企业,“cn”代表中国,为China的缩写。由此,部署完成的网站要正式运行,必须先向域名服务商申请域名,并进行备案。
(4)路由设备则为普通用户通过浏览器访问不同地方的服务器提供了网址寻址、转发数据的功能。
(5)信息软件,在本书中就是指网站。
(6)个人终端主要包括了台式电脑及浏览器、手机终端及浏览器、平板电脑及浏览器等。
·········
|
|