制结构 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.1SQL数据库 44
5.2NoSQL数据库 45
5.3使用SQL还是NoSQL 46
5.4Python数据库框架 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集成Pythonshell 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
第二部分实例:社交博客应用
第8章用户身份验证 77
8.1Flask的身份验证扩展 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-PageDown 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.1REST简介 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
第三部分成功在望
第15章测试 169
15.1获取代码覆盖度报告 169
15.2Flask测试客户端 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.4Heroku平台 186
17.4.1准备工作 187
17.4.2使用herokulocal测试 193
17.4.3执行gitpush命令部署 194
17.4.4升级后重新部署 195
17.5Docker容器 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使用DockerCompose编排容器 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