第1章 Flask前奏 1
1.1 Flask简介 1
1.2 环境搭建 1
1.2.1 Python环境 2
1.2.2 Flask版本 3
1.2.3 开发软件 4
第2章 项目配置 9
2.1 Debug模式、Host、Port配置 9
2.1.1 Debug模式 9
2.1.2 设置Host和Port 13
2.2 在app.config中添加配置 18
2.2.1 使用app.config配置 18
2.2.2 使用Python配置文件 19
第3章 URL与视图 20
3.1 定义URL 21
3.1.1 定义无参数的URL 22
3.1.2 定义有参数的URL 22
3.2 HTTP请求方法 27
3.3 页面重定向 29
3.4 构造URL 30
第4章 Jinja2模板 32
4.1 模板的基本使用 32
4.1.1 渲染模板 32
4.1.2 渲染变量 34
4.2 过滤器和测试器 38
4.2.1 自定义过滤器 38
4.2.2 Jinja2内置过滤器 39
4.2.3 测试器 42
4.3 控制语句 44
4.3.1 if判断语句 44
4.3.2 for循环语句 45
4.4 模板结构 51
4.4.1 宏和import语句 51
4.4.2 模板继承 52
4.4.3 引入模板 54
4.5 模板环境 55
4.5.1 模板上下文 55
4.5.2 全局函数 56
4.5.3 Flask模板环境 57
4.6 其他 58
4.6.1 转义 58
4.6.2 加载静态文件 59
4.6.3 闪现消息 59
第5章 数据库 61
5.1 准备工作 61
5.1.1 MySQL软件 61
5.1.2 Python操作MySQL驱动 61
5.1.3 Flask-SQLAlchemy 62
5.2 Flask-SQLAlchemy的基本使用 62
5.2.1 连接MySQL 62
5.2.2 ORM模型 63
5.2.3 CRUD操作 66
5.3 表关系 70
5.3.1 外键 71
5.3.2 一对多关系 71
5.3.3 一对一关系 74
5.3.4 多对多关系 75
5.3.5 级联操作 77
5.4 ORM模型迁移 80
5.4.1 创建迁移对象 80
5.4.2 初始化迁移环境 81
5.4.3 生成迁移脚本 81
5.4.4 执行迁移脚本 81
第6章 表单 83
6.1 表单验证 83
6.1.1 表单类编写 85
6.1.2 视图函数中使用表单 87
6.1.3 自定义验证字段 89
6.2 渲染表单模板 90
6.3 CSRF攻击 93
第7章 Flask进阶 98
7.1 类视图 98
7.1.1 基本使用 98
7.1.2 方法限制 99
7.1.3 基于方法的类视图 100
7.1.4 添加装饰器 101
7.2 蓝图 101
7.2.1 基本使用 101
7.2.2 寻找模板 102
7.2.3 寻找静态文件 102
7.3 cookie和session 103
7.3.1 关于cookie和session的介绍 103
7.3.2 Flask中使用cookie和session 104
7.4 request对象 105
7.5 Flask信号机制 106
7.5.1 自定义信号 106
7.5.2 Flask内置信号 107
7.6 常用钩子函数 108
7.7 上下文 109
7.7.1 线程隔离对象 110
7.7.2 LocalStack类 111
7.7.3 LocalProxy类 114
第8章 缓存系统 117
8.1 Memcached 117
8.1.1 安装Memcached 117
8.1.2 telnet操作Memcached 118
8.1.3 Python操作Memcached 121
8.1.4 Memcached的安全性 122
8.2 Redis 122
8.2.1 Redis使用场景 122
8.2.2 Redis和Memcached比较 123
8.2.3 Redis在Ubuntu中的安装与
使用 123
8.2.4 Redis操作命令 125
8.2.5 同步数据到硬盘 130
8.2.6 设置密码 131
8.2.7 Python操作Redis 132
第9章 项目实战 134
9.1 创建项目 135
9.1.1 config.py文件 137
9.1.2 exts.py文件 139
9.1.3 blueprints模块 140
9.1.4 models模块 142
9.2 创建用户相关模型 143
9.2.1 创建权限和角色模型 143
9.2.2 创建权限和角色 146
9.2.3 创建用户模型 150
9.2.4 创建测试用户 154
9.2.5 创建管理员 155
9.3 注册 155
9.3.1 渲染注册模板 155
9.3.2 使用Flask-Mail发送邮箱验证码 160
9.3.3 使用Flask-Caching和Redis缓存
验证码 165
9.3.4 使用Celery发送邮件 167
9.3.5 RESTful API 170
9.3.6 CSRF保护 173
9.3.7 使用AJAX获取邮箱验证码 173
9.3.8 实现注册功能 176
9.4 登录 179
9.5 发布帖子 182
9.5.1 添加帖子相关模型 183
9.5.2 初始化板块数据 184
9.5.3 渲染发布帖子模板 184
9.5.4 使用wangEditor富文本编辑器 186
9.5.5 未登录限制 191
9.5.6 服务端实现发帖功能 193
9.5.7 使用AJAX发布帖子 194
9.6 首页 195
9.6.1 生成帖子测试数据 197
9.6.2 使用Flask-Paginate实现分页 198
9.6.3 过滤帖子 200
9.7 帖子详情 202
9.7.1 动态加载帖子详情数据 202
9.7.2 发布评论 203
9.8 个人中心 205
9.8.1 使用Flask-Avatars生成随机
头像 206
9.8.2 修改导航条上的登录状态 209
9.8.3 根据用户显示个人中心 210
9.8.4 修改用户信息 212
9.9 CMS管理系统 215
9.9.1 CMS入口 215
9.9.2 权限管理 216
9.9.3 员工管理页面 219
9.9.4 添加员工 221
9.9.5 编辑员工 223
9.9.6 管理前台用户 225
9.9.7 帖子管理 228
9.9.8 评论管理 230
9.9.9 板块管理 231
9.10 错误处理 231
9.11 日志 233
9.11.1 loggers模块 233
9.11.2 handlers模块 234
9.11.3 filters模块 235
9.11.4 formatters模块 236
9.12 部署 237
9.12.1 导出依赖包 237
9.12.2 使用Git上传代码 237
9.12.3 生产环境的配置 241
9.12.4 安装常用软件 241
9.12.5 配置网站 243
9.12.6 使用Gunicorn部署网站 244
9.12.7 使用Nginx部署网站 246
9.12.8 压力测试 249
第10章 WebSocket实战 252
10.1 安装相应的包 253
10.2 创建SocketIO对象 253
10.3 实现登录 254
10.4 连接和取消连接 257
10.5 获取在线用户 258
10.6 实现单聊 259
10.7 实现群聊 260
10.8 部署项目 261
第11章 Flask异步编程 263
11.1 asyncio标准库 263
11.2 aiohttp库 265
11.3 异步版Flask安装与异步编程性能 266
11.3.1 安装异步版Flask 266
11.3.2 Flask异步编程性能 266
11.3.3 实战—异步发送HTTP请求 267
11.3.4 使用异步SQLAlchemy 269
11.3.5 Jinja2开启异步支持 271