第一部分 Flask简介 3
第1章 安装 3
1.1 创建应用目录 4
1.2 虚拟环境 4
1.3 在Python 3中创建虚拟环境 4
1.4 在Python 2中创建虚拟环境 5
1.5 使用虚拟环境 5
1.6 使用pip安装Python包 6
第2章 应用的基本结构 7
2.1 初始化 7
2.2 路由和视图函数 7
2.3 一个完整的应用 9
2.4 Web开发服务器 9
2.5 动态路由 10
2.6 调试模式 11
2.7 命令行选项 13
2.8 请求-响应循环 14
2.8.1 应用和请求上下文 14
2.8.2 请求分派 16
2.8.3 请求对象 16
2.8.4 请求钩子 17
2.8.5 响应 18
2.9 Flask扩展 19
第3章 模板 20
3.1 Jinja2模板引擎 20
3.1.1 渲染模板 21
3.1.2 变量 21
3.1.3 控制结构 22
3.2 使用Flask-Bootstrap集成Bootstrap 24
3.3 自定义错误页面 27
3.4 链接 29
3.5 静态文件 30
3.6 使用Flask-Moment本地化日期和时间 31
第4章 Web表单 34
4.1 配置 34
4.2 表单类 35
4.3 把表单渲染成HTML 37
4.4 在视图函数中处理表单 38
4.5 重定向和用户会话 40
4.6 闪现消息 42
第5章 数据库 44
5.1 SQL数据库 44
5.2 NoSQL数据库 45
5.3 使用SQL还是NoSQL 46
5.4 Python数据库框架 46
5.5 使用Flask-SQLAlchemy管理数据库 47
5.6 定义模型 48
5.7 关系 49
5.8 数据库操作 51
5.8.1 创建表 51
5.8.2 插入行 51
5.8.3 修改行 53
5.8.4 删除行 53
5.8.5 查询行 53
5.9 在视图函数中操作数据库 55
5.10 集成Python shell 56
5.11 使用Flask-Migrate实现数据库迁移 56
5.11.1 创建迁移仓库 57
5.11.2 创建迁移脚本 57
5.11.3 更新数据库 58
5.11.4 添加几个迁移 59
第6章 电子邮件 60
第7章 大型应用的结构 65
7.1 项目结构 65
7.2 配置选项 66
7.3 应用包 67
7.3.1 使用应用工厂函数 68
7.3.2 在蓝本中实现应用功能 69
7.4 应用脚本 71
7.5 需求文件 71
7.6 单元测试 72
7.7 创建数据库 74
7.8 运行应用 74
第二部分 实例:社交博客应用 77
第8章 用户身份验证 77
8.1 Flask的身份验证扩展 77
8.2 密码安全性 77
8.3 创建身份验证蓝本 80
8.4 使用Flask-Login验证用户身份 81
8.4.1 准备用于登录的用户模型 82
8.4.2 保护路由 83
8.4.3 添加登录表单 83
8.4.4 登入用户 85
8.4.5 登出用户 86
8.4.6 理解Flask-Login的运作方式 86
8.4.7 登录测试 87
8.5 注册新用户 88
8.5.1 添加用户注册表单 88
8.5.2 注册新用户 90
8.6 确认账户 90
8.6.1 使用itsdangerous生成确认令牌 90
8.6.2 发送确认邮件 92
8.7 管理账户 95
第9章 用户角色 97
9.1 角色在数据库中的表示 97
9.2 赋予角色 100
9.3 检验角色 101
第10章 用户资料 104
10.1 资料信息 104
10.2 用户资料页面 105
10.3 资料编辑器 107
10.3.1 用户级资料编辑器 107
10.3.2 管理员级资料编辑器 109
10.4 用户头像 111
第11章 博客文章 115
11.1 提交和显示博客文章 115
11.2 在资料页中显示博客文章 118
11.3 分页显示长博客文章列表 118
11.3.1 创建虚拟博客文章数据 119
11.3.2 在页面中渲染数据 120
11.3.3 添加分页导航 121
11.4 使用Markdown和Flask-PageDown支持富文本文章 123
11.4.1 使用Flask-PageDow 124
11.4.2 在服务器端处理富文本 125
11.5 博客文章的固定链接 126
11.6 博客文章编辑器 128
第12章 关注者 130
12.1 再论数据库关系 130
12.1.1 多对多关系 130
12.1.2 自引用关系 132
12.1.3 高级多对多关系 132
12.2 在资料页面中显示关注者 135
12.3 使用数据库联结查询所关注用户的文章 137
12.4 在首页显示所关注用户的文章 139
第13章 用户评论 143
13.1 评论在数据库中的表示 143
13.2 提交和显示评论 144
13.3 管理评论 146
第14章 应用编程接口 150
14.1 REST简介 150
14.1.1 资源就是一切 151
14.1.2 请求方法 151
14.1.3 请求和响应主体 152
14.1.4 版本 153
14.2 使用Flask实现REST式Web服务 153
14.2.1 创建API蓝本 153
14.2.2 错误处理 154
14.2.3 使用Flask-HTTPAuth验证用户身份 156
14.2.4 基于令牌的身份验证 158
14.2.5 资源和JSON的序列化转换 159
14.2.6 实现资源的各个端点 161
14.2.7 分页大型资源集合 163
14.2.8 使用HTTPie测试Web服务 164
第三部分 成功在望 169
第15章 测试 169
15.1 获取代码覆盖度报告 169
15.2 Flask测试客户端 172
15.2.1 测试Web应用 172
15.2.2 测试Web服务 175
15.3 使用Selenium进行端到端测试 176
15.4 值得测试吗 180
第16章 性能 181
16.1 在日志中记录影响性能的缓慢数据库查询 181
16.2 分析源码 183
第17章 部署 184
17.1 部署流程 184
17.2 把生产环境中的错误写入日志 185
17.3 云部署 186
17.4 Heroku平台 186
17.4.1 准备工作 187
17.4.2 使用heroku local测试 193
17.4.3 执行git push命令部署 194
17.4.4 升级后重新部署 195
17.5 Docker容器 195
17.5.1 安装Docker 195
17.5.2 构建容器映像 196
17.5.3 运行容器 199
17.5.4 审查运行中的容器 200
17.5.5 把容器映像推送到外部注册处 200
17.5.6 使用外部数据库 201
17.5.7 使用Docker Compose编排容器 202
17.5.8 清理旧容器和映像 205
17.5.9 在生产环境中使用Docker 205
17.6 传统部署方式 206
17.6.1 架设服务器 206
17.6.2 导入环境变量 207
17.6.3 配置日志 207
第18章 其他资源 209
18.1 使用集成开发环境 209
18.2 寻找Flask扩展 209
18.3 寻求帮助 210
18.4 参与Flask社区 210
作者简介 211
关于封面 211