MENU

Flask Web开发: 基于Python的Web应用开发实战 pdf版

January 4, 2021 • 资源及工具

封面:FlaskWeb开发.jpg
本pdf版由图灵社区发行人民邮电出版社出版linux公社整理,这里只是资源分享,如有侵权马上下线。

前言

其他框架相比,Flask 之所以能脱颖而出,原因在于它让开发者做主,使其能对程序具有全面的创意控制。或许你曾听过“和框架斗争”这一说法。在大多数框架中,当你决定使用的解决方案不受框架官方支持时就会发生这种情况。你可能想使用不同的数据库引擎或者不同的用户认证方法。但是,这种偏离框架开发者设定路线的做法往往会给你带来很多麻烦。Flask 就不一样了。你喜欢关系型数据库?很好。Flask 支持所有的关系型数据库。或许你更喜欢使用 NoSQL 数据库?没问题,Flash 也支持。想使用自己开发的数据库引擎?根本用不到数据库?依然没问题。在 Flask 中,你可以自主选择程序的组件,如果找不到合适的,还可以自己开发。就这么简单。Flask 之所以能给用户提供这么大的自由度,关键在于其开发伊始就考虑到了扩展性。Flask 提供了一个强健的心,其中包含每个 Web 程序都需要的基本功能,而其他功能则交给行业系统中的众多第三方扩展,当然,你也可以自行开发。在本书中,我展示自己使用 Flask 开发 Web 程序的工作流程。我不觉得这是使用 Flask 开发程序的唯一正确方式。你应该把我的选择作为一种推荐方式,而不是真理。大部分软件开发类图书都使用短而精的示例代码,孤立地演示所介绍技术的功能,让读者自己去思考如何使用“胶水”代码把这些不同的功能结合起来,从而开发出完整可用的程序。在本书中,我采用了完全不同的方式。我使用的示例代码都摘自同一个程序,开始时,后续逐章进行扩展。最初这个程序只有几行代码,最后将变成功能完善的博客和社交网络程序。


目录

前言 ......................................................................................................................................................... XI
第一部分 Flask 简介
第 1 章 安装 ......................................................................................................................................... 3
1.1 使用虚拟环境 ............................................................................................................................. 4
1.2 使用 pip 安装 Python 包 ............................................................................................................ 6
第 2 章 程序的基本结构 .................................................................................................................. 7
2.1 初始化 ......................................................................................................................................... 7
2.2 路由和视图函数 ......................................................................................................................... 7
2.3 启动服务器 ................................................................................................................................. 9
2.4 一个完整的程序 ......................................................................................................................... 9
2.5 请求 − 响应循环 ....................................................................................................................... 11
2.5.1 程序和请求上下文 ...................................................................................................... 11
2.5.2 请求调度 ...................................................................................................................... 13
2.5.3 请求钩子 ...................................................................................................................... 13
2.5.4 响应 .............................................................................................................................. 14
2.6 Flask 扩展 ................................................................................................................................. 15
第 3 章 模板 ....................................................................................................................................... 19
3.1 Jinja2 模板引擎 ........................................................................................................................ 19
3.1.1 渲染模板 ...................................................................................................................... 20
3.1.2 变量 .............................................................................................................................. 21
3.1.3 控制结构 ...................................................................................................................... 22
3.2 使用 Flask-Bootstrap 集成 Twitter Bootstrap .......................................................................... 23
3.3 自定义错误页面 ....................................................................................................................... 26
3.4 链接 ........................................................................................................................................... 29
3.5 静态文件 ................................................................................................................................... 29
3.6 使用 Flask-Moment 本地化日期和时间 ................................................................................. 30
第 4 章 Web 表单 ............................................................................................................................ 33
4.1 跨站请求伪造保护 ................................................................................................................... 33
4.2 表单类 ....................................................................................................................................... 34
4.3 把表单渲染成 HTML ............................................................................................................... 35
4.4 在视图函数中处理表单 ........................................................................................................... 37
4.5 重定向和用户会话 ................................................................................................................... 39
4.6 Flash 消息 ................................................................................................................................. 41
第 5 章 数据库 .................................................................................................................................. 43
5.1 SQL 数据库 .............................................................................................................................. 43
5.2 NoSQL 数据库 ......................................................................................................................... 44
5.3 使用 SQL 还是 NoSQL ............................................................................................................ 45
5.4 Python 数据库框架 ................................................................................................................... 45
5.5 使用 Flask-SQLAlchemy 管理数据库 ..................................................................................... 46
5.6 定义模型 ................................................................................................................................... 47
5.7 关系 ........................................................................................................................................... 49
5.8 数据库操作 ............................................................................................................................... 50
5.8.1 创建表 .......................................................................................................................... 50
5.8.2 插入行 .......................................................................................................................... 51
5.8.3 修改行 .......................................................................................................................... 52
5.8.4 删除行 .......................................................................................................................... 52
5.8.5 查询行 .......................................................................................................................... 52
5.9 在视图函数中操作数据库 ....................................................................................................... 54
5.10 集成 Python shell .................................................................................................................... 56
5.11 使用 Flask-Migrate 实现数据库迁移 .................................................................................... 56
5.11.1 创建迁移仓库 ........................................................................................................... 57
5.11.2 创建迁移脚本 ........................................................................................................... 57
5.11.3 更新数据库 ............................................................................................................... 58
第 6 章 电子邮件 .............................................................................................................................. 59
使用 Flask-Mail 提供电子邮件支持 ................................................................................................ 59
在 Python shell 中发送电子邮件 ............................................................................................. 60
在程序中集成发送电子邮件功能 .......................................................................................... 61
异步发送电子邮件 .................................................................................................................. 62
第 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
第二部分 实例:社交博客程序
第 8 章 用户认证 .............................................................................................................................. 77
8.1 Flask 的认证扩展 ..................................................................................................................... 77
8.2 密码安全性 ............................................................................................................................... 77
8.3 创建认证蓝本 ........................................................................................................................... 80
8.4 使用 Flask-Login 认证用户 ..................................................................................................... 81
8.4.1 准备用于登录的用户模型 .......................................................................................... 81
8.4.2 保护路由 ...................................................................................................................... 83
8.4.3 添加登录表单 .............................................................................................................. 83
8.4.4 登入用户 ...................................................................................................................... 84
8.4.5 登出用户 .................................................................................................................... 86
8.4.6 测试登录 ...................................................................................................................... 86
8.5 注册新用户 ............................................................................................................................... 87
8.5.1 添加用户注册表单 ...................................................................................................... 87
8.5.2 注册新用户 .................................................................................................................. 89
8.6 确认账户 ................................................................................................................................... 90
8.6.1 使用 itsdangerous 生成确认令牌 ................................................................................ 90
8.6.2 发送确认邮件 .............................................................................................................. 92
8.7 管理账户 ................................................................................................................................... 95
第 9 章 用户角色 .............................................................................................................................. 97
9.1 角色在数据库中的表示 ........................................................................................................... 97
9.2 赋予角色 ................................................................................................................................... 99
9.3 角色验证 ................................................................................................................................. 100
第 10 章 用户资料 ......................................................................................................................... 103
10.1 资料信息 ............................................................................................................................... 103
10.2 用户资料页面 ....................................................................................................................... 104
10.3 资料编辑器 ........................................................................................................................... 106
10.3.1 用户级别的资料编辑器 ......................................................................................... 106
10.3.2 管理员级别的资料编辑器 ..................................................................................... 108
10.4 用户头像 ............................................................................................................................... 110
第 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 支持富文本文章 ...................................................... 124
11.4.1 使用 Flask-PageDown ............................................................................................. 124
11.4.2 在服务器上处理富文本 ......................................................................................... 125
11.5 博客文章的固定链接 ........................................................................................................... 127
11.6 博客文章编辑器 ................................................................................................................... 128
第 12 章 关注者 .............................................................................................................................. 131
12.1 再论数据库关系 ................................................................................................................... 131
12.1.1 多对多关系 ............................................................................................................. 131
12.1.2 自引用关系 ............................................................................................................. 133
12.1.3 高级多对多关系 ..................................................................................................... 134
12.2 在资料页中显示关注者 ....................................................................................................... 136
12.3 使用数据库联结查询所关注用户的文章 ........................................................................... 138
12.4 在首页显示所关注用户的文章 ........................................................................................... 141
第 13 章 用户评论 ......................................................................................................................... 145
13.1 评论在数据库中的表示 ....................................................................................................... 145
13.2 提交和显示评论 ................................................................................................................... 146
13.3 管理评论 ............................................................................................................................... 149
第 14 章 应用编程接口 ................................................................................................................ 153
14.1 REST 简介 ............................................................................................................................ 153
14.1.1 资源就是一切 ......................................................................................................... 154
14.1.2 请求方法 ................................................................................................................. 154
14.1.3 请求和响应主体 ..................................................................................................... 155
14.1.4 版本 ......................................................................................................................... 156
14.2 使用 Flask 提供 REST Web 服务 ........................................................................................ 156
14.2.1 创建 API 蓝本 ........................................................................................................ 157
14.2.2 错误处理 ................................................................................................................. 157
14.2.3 使用 Flask-HTTPAuth 认证用户 ........................................................................... 159
14.2.4 基于令牌的认证 ..................................................................................................... 161
14.2.5 资源和 JSON 的序列化转换 ................................................................................. 162
14.2.6 实现资源端点 ......................................................................................................... 165
14.2.7 分页大型资源集合 ................................................................................................. 167
14.2.8 使用 HTTPie 测试 Web 服务 ................................................................................. 168
第三部分 成功在望
第 15 章 测试 .................................................................................................................................. 173
15.1 获取代码覆盖报告 ............................................................................................................... 173
15.2 Flask 测试客户端 ................................................................................................................. 176
15.2.1 测试 Web 程序 ........................................................................................................ 176
15.2.2 测试 Web 服务 ........................................................................................................ 179
15.3 使用 Selenium 进行端到端测试 .......................................................................................... 180
15.4 值得测试吗 ........................................................................................................................... 184
第 16 章 性能 .................................................................................................................................. 185
16.1 记录影响性能的缓慢数据库查询 ....................................................................................... 185
16.2 分析源码 ............................................................................................................................... 187
第 17 章 部署 .................................................................................................................................. 189
17.1 部署流程 ............................................................................................................................... 189
17.2 把生产环境中的错误写入日志 ........................................................................................... 190
17.3 云部署 ................................................................................................................................... 191
17.4 Heroku 平台 .......................................................................................................................... 191
17.4.1 准备程序 ................................................................................................................. 192
17.4.2 使用 Foreman 进行测试 ......................................................................................... 196
17.4.3 使用 Flask-SSLify 启用安全 HTTP ....................................................................... 197
17.4.4 执行 git push 命令部署 ........................................................................................ 198
17.4.5 查看日志 ................................................................................................................. 199
17.4.6 部署一次升级 ......................................................................................................... 199
17.5 传统的托管 ........................................................................................................................... 200
17.5.1 架设服务器 ............................................................................................................. 200
17.5.2 导入环境变量 ......................................................................................................... 200
17.5.3 配置日志 ................................................................................................................. 201
第 18 章 其他资源 ......................................................................................................................... 203
18.1 使用集成开发环境 ............................................................................................................... 203
18.2 查找 Flask 扩展 .................................................................................................................... 204
18.3 参与 Flask 开发 .................................................................................................................... 204


在大多数标准中,Flask(http://flask.pocoo.org/)都算是小型框架,小到可以称为“微框架”。Flask 非常小,因此你一旦能够熟练使用它,很可能就能读懂它所有的源码。但是,小并不意味着它比其他框架的功能少。Flask 自开发伊始就被设计为可扩展的框架,它具有一个包含基本服务的强健核心,其他功能则可通过扩展实现。你可以自己挑选所需的扩展包,组成一个没有附加功能的精益组合,从而完全精确满足自身需求。
Flask 有两个主要依赖:路由、调试和 Web 服务器网关接口(Web Server Gateway Interface,WSGI)子系统由 Werkzeug(http://werkzeug.pocoo.org/)提供;模板系统由 Jinja2(http://jinja.pocoo.org/)提供。Werkzeug 和 Jinjia2 都是由 Flask 的核心开发者开发而成。Flask 并不原生支持数据库访问、Web 表单验证和用户认证等高级功能。这些功能以及其他大多数 Web 程序中需要的核心服务都以扩展的形式实现,然后再与核心包集成。开发者可以任意挑选符合项目需求的扩展,甚至可以自行发。这和大型框架的做法相反,大型框架往往已经替你做出了大多数决定,难以(有时甚至不允许)使用替代方案。

下载地址

此处内容需要评论回复后方可阅读

Leave a Comment

3 Comments
  1. 你的心 你的心

    真香,现在找点资源是真难!@(大拇指)

  2. steve steve

    好吧, 这就是缘分, 最近几天正好想着什么时候学习一下flask

  3. qqqq qqqq

    厉害