完整目录
第一部分 基础篇¶
第 1 章 初识 Flask¶
- 1.1 搭建开发环境
- 1.1.1 创建练习项目目录
- 1.1.2 使用 PDM 管理虚拟环境和依赖
- 1.1.3 设置 PyPI 镜像源
- 1.1.4 安装 Flask
- 1.1.5 集成开发环境 PyCharm
- 1.2 Hello,Flask!
- 1.2.1 创建程序实例
- 1.2.2 注册路由
- 1.3 开发服务器
- 1.3.1 Run,Flask,Run!
- 1.3.2 程序自动发现机制
- 1.3.3 开启调试模式
- 1.3.4 使服务器对外可见
- 1.3.5 改变默认端口
- 1.3.6 使用 PyCharm 运行服务器
- 1.4 Flask Shell
- 1.5 Flask 扩展
- 1.6 项目配置
- 1.7 视图、URL 和端点
- 1.8 Flask 命令
- 1.9 模板与静态文件
- 1.10 获取和使用示例程序
- 1.11 本章小结
第 2 章 Flask 与 HTTP¶
- 2.1 请求 - 响应循环
- 2.2 HTTP 请求
- 2.2.1 存储请求信息的 request 对象
- 2.2.2 在 Flask 中处理请求
- 2.2.3 请求钩子
- 2.3 HTTP 响应
- 2.3.1 在 Flask 中生成响应
- 2.3.2 cookie 和 session 对象
- 2.4 Flask 上下文
- 2.4.1 上下文全局变量
- 2.4.2 推送上下文
- 2.4.3 上下文钩子
- 2.5 Web 安全防范
- 2.5.1 注入攻击
- 2.5.2 XSS 攻击
- 2.5.3 CSRF 攻击
- 2.6 小实践:重定向到上一个页面
- 2.6.1 获取上一个页面的 URL
- 2.6.2 对 URL 进行安全验证
- 2.7 本章小结
第 3 章 模板与静态文件¶
- 3.1 模板的基本用法
- 3.1.1 创建模板
- 3.1.2 模板语法
- 3.1.3 渲染模板
- 3.2 模板的辅助工具
- 3.2.1 模板上下文
- 3.2.2 全局对象
- 3.2.3 过滤器
- 3.2.4 测试器
- 3.2.5 模板环境对象
- 3.3 模板的组织结构
- 3.3.1 局部模板
- 3.3.2 宏
- 3.3.3 模板继承
- 3.4 静态文件
- 3.4.1 添加 Favicon
- 3.4.2 使用 CSS 框架:Bootstrap
- 3.4.3 JavaScript 和 CSS 中的 Jinja
- 3.5 消息闪现
- 3.5.1 在视图函数中发送消息
- 3.5.2 在模板中渲染消息
- 3.6 自定义错误页面
- 3.7 使用 Bootstrap-Flask 简化模板编写
- 3.8 本章小结
第 4 章 表单¶
- 4.1 HTML 表单
- 4.2 使用 WTForms 和 Flask-WTF 处理表单
- 4.2.1 定义表单类
- 4.2.2 输出表单 HTML 代码
- 4.2.3 在模板中渲染表单
- 4.3 处理表单数据
- 4.3.1 提交表单
- 4.3.2 验证表单数据
- 4.3.3 在模板中渲染错误消息
- 4.3.4 设置验证错误消息的语言
- 4.4 自定义验证器
- 4.4.1 验证方法
- 4.4.2 全局验证器
- 4.5 使用 Bootstrap-Flask 快速渲染表单
- 4.5.1 渲染表单字段
- 4.5.2 渲染整个表单
- 4.5.3 渲染表单行
- 4.5.4 设置提交按钮的样式
- 4.6 本章小结
第 5 章 数据库¶
- 5.1 数据库分类
- 5.1.1 SQL
- 5.1.2 NoSQL
- 5.1.3 如何选择数据库
- 5.2 ORM 魔法
- 5.3 安装和初始化 Flask-SQLAlchemy
- 5.4 连接数据库服务器
- 5.4.1 连接到 SQLite
- 5.4.2 连接到 MySQL
- 5.4.3 连接到 PostgreSQL
- 5.5 定义 SQLAlchemy 模型类
- 5.5.1 定义表名
- 5.5.2 定义字段
- 5.5.3 定义
__repr__()方法
- 5.6 创建数据库表
- 5.7 数据库操作
- 5.7.1 会话
- 5.7.2 插入新记录
- 5.7.3 获取记录
- 5.7.4 过滤记录
- 5.7.5 更新记录
- 5.7.6 删除记录
- 5.8 配置 Python Shell 上下文
- 5.9 定义关系
- 5.9.1 一对多
- 5.9.2 多对一
- 5.9.3 一对一
- 5.9.4 多对多
- 5.9.5 基于只写加载器(Write-only Loader)获取集合关系记录
- 5.9.6 是否使用外键
- 5.10 更新数据库表与数据迁移
- 5.10.1 重新生成表
- 5.10.2 使用 Flask-Migrate 迁移数据库
- 5.10.3 开发时是否需要进行迁移
- 5.11 数据库高级实践
- 5.11.1 级联操作
- 5.11.2 事件监听
- 5.11.3 外键 ON DELETE 级联
- 5.12 使用 Faker 生成虚拟数据
- 5.13 小练习:编写一个记事本程序
- 5.13.1 创建笔记
- 5.13.2 显示笔记列表
- 5.13.3 更新笔记
- 5.13.4 删除笔记
- 5.14 本章小结
第 6 章 自动化测试¶
- 6.1 了解自动化测试
- 6.2 Flask 测试客户端
- 6.3 使用 unittest 编写单元测试
- 6.3.1 Flask 程序的测试固件
- 6.3.2 为测试创建程序上下文
- 6.3.3 编写测试用例
- 6.3.4 运行测试
- 6.4 测试 Flask 命令
- 6.5 使用 coverage.py 计算测试覆盖率
- 6.5.1 基本用法
- 6.5.2 获取测试覆盖率
- 6.5.3 使用 pytest-cov 集成 coverage.py
- 6.6 使用 Ruff 优化代码风格
- 6.6.1 代码风格检查
- 6.6.2 代码格式化
- 6.7 类型标注
- 6.8 本章小结
第 7 章 常用 Flask 开发技巧¶
- 7.1 使用 Flask-Mailman 发送电子邮件
- 7.1.1 配置 Flask-Mailman
- 7.1.2 构建邮件数据
- 7.1.3 发送邮件
- 7.1.4 发送多封邮件
- 7.1.5 提供 HTML 格式的邮件正文
- 7.1.6 使用模板组织邮件正文
- 7.1.7 异步发送邮件
- 7.2 使用 AJAX 发送异步请求
- 7.2.1 认识 AJAX
- 7.2.2 使用 Fetch API 发送 AJAX 请求
- 7.2.3 处理 AJAX 请求
- 7.2.4 处理 AJAX 响应
- 7.3 使用 Flask-WTF 上传文件
- 7.3.1 定义上传字段
- 7.3.2 渲染上传表单
- 7.3.3 处理上传文件
- 7.3.4 查看和下载上传文件
- 7.3.5 上传多个文件
- 7.4 使用 Flask-CKEditor 集成富文本编辑器
- 7.4.1 引入 CKEditor JavaScript 资源
- 7.4.2 定义 CKEditor 编辑器字段并渲染
- 7.4.3 配置 CKEditor 编辑器
- 7.4.4 获取编辑器字段数据并渲染
- 7.4.5 使用 Bleach 进行 HTML 安全清理
- 7.4.6 上传图片
- 7.5 使用 CSRFProtect 实现 CSRF 保护
- 7.5.1 设置 CSRF 令牌
- 7.5.2 处理 CSRF 错误
- 7.6 使用 Flask-DebugToolbar 调试程序
- 7.7 本章小结
第二部分 实战篇¶
第 8 章 项目组织¶
- 8.1 基本项目组织技巧
- 8.1.1 使用包组织代码
- 8.1.2 在文件中存储程序配置
- 8.1.3 注册视图函数到程序实例
- 8.1.4 使用绝对导入
- 8.1.5 运行使用包组织的程序
- 8.1.6 创建子包
- 8.2 使用蓝本模块化程序
- 8.2.1 创建蓝本
- 8.2.2 装配蓝本
- 8.2.3 注册蓝本
- 8.2.4 蓝本的路由端点
- 8.2.5 蓝本静态文件和模板
- 8.2.6 蓝本嵌套
- 8.3 组织程序配置
- 8.3.1 从环境变量中读取配置
- 8.3.2 使用 python-dotenv 管理环境变量
- 8.3.3 使用 Python 类组织程序配置
- 8.4 使用工厂函数创建程序实例
- 8.4.1 初始化扩展
- 8.4.2 组织工厂函数
- 8.4.3 创建程序入口脚本
- 8.4.4 使用 current_app 获取程序实例
- 8.5 组织测试
- 8.6 项目组织架构
- 8.6.1 功能式架构
- 8.6.2 分区式架构
- 8.6.3 如何选择组织架构
- 8.7 本章小结
第 9 章 程序实例:个人博客¶
- 9.1 Web 程序开发流程
- 9.1.1 程序功能设计
- 9.1.2 前端页面开发
- 9.1.3 后端程序开发
- 9.1.4 部署上线
- 9.2 编写程序框架
- 9.2.1 创建数据库模型
- 9.2.2 邻接列表关系
- 9.2.3 生成虚拟数据
- 9.2.4 模板文件
- 9.2.5 基模板
- 9.2.6 模板上下文
- 9.2.7 视图函数
- 9.2.8 单元测试
- 9.3 渲染导航链接
- 9.4 实现 Flash 消息分类
- 9.5 日期和时间的本地化
- 9.5.1 存储 UTC 时间
- 9.5.2 使用 Day.js 渲染日期和时间
- 9.5.3 渲染不同语言的时间
- 9.5.4 渲染日期时间
- 9.5.5 渲染相对时间
- 9.6 编写博客前台
- 9.6.1 分页显示文章列表
- 9.6.2 显示文章正文
- 9.6.3 文章固定链接
- 9.6.4 显示分类文章列表
- 9.6.5 显示评论列表
- 9.7 文章评论与回复
- 9.7.1 发送评论提醒邮件
- 9.7.2 创建评论表单
- 9.7.3 发表评论
- 9.7.4 支持回复评论
- 9.8 网站主题切换
- 9.9 创建管理员用户
- 9.9.1 安全存储密码
- 9.9.2 创建用户命令
- 9.10 使用 Flask-Login 管理用户认证
- 9.10.1 获取当前用户
- 9.10.2 登录表单
- 9.10.3 登录用户
- 9.10.4 登出用户
- 9.10.5 视图保护
- 9.10.6 在单元测试中认证
- 9.11 编写博客管理后台
- 9.11.1 文章管理
- 9.11.2 评论管理
- 9.11.3 分类管理
- 9.12 本章小结
第 10 章 程序实例:图片社交网站¶
- 10.1 程序功能与数据库设计
- 10.1.1 数据库模型与虚拟图片
- 10.1.2 模板和静态文件
- 10.1.3 使用 Bootstrap 图标
- 10.2 用户注册与验证
- 10.2.1 实现用户注册
- 10.2.2 使用 JWT 进行邮箱验证
- 10.2.3 使用装饰器过滤未确认用户
- 10.2.4 密码重置
- 10.3 基于用户角色的权限管理
- 10.3.1 角色与权限模型
- 10.3.2 设置角色和权限
- 10.3.3 写入角色和权限
- 10.3.4 验证用户权限
- 10.4 使用 Flask-Dropzone 优化文件上传功能
- 10.4.1 配置 Flask-Dropzone
- 10.4.2 渲染上传区域
- 10.4.3 处理并保存上传图片
- 10.5 使用 Flask-Avatars 处理用户头像
- 10.5.1 使用默认头像
- 10.5.2 生成随机头像
- 10.6 图片展示与管理
- 10.6.1 在用户主页显示图片列表
- 10.6.2 图片详情页
- 10.6.3 上一张和下一张跳转
- 10.6.4 删除确认模态框
- 10.6.5 举报图片
- 10.6.6 图片描述
- 10.6.7 图片标签
- 10.6.8 用户资料弹窗
- 10.7 图片收藏
- 10.7.1 添加和取消收藏
- 10.7.2 收藏者和收藏页面
- 10.8 用户关注
- 10.8.1 自引用的多对多关系
- 10.8.2 关注与取消关注
- 10.8.3 显示关注用户列表
- 10.8.4 使用 AJAX 在弹窗中执行关注操作
- 10.9 消息提醒
- 10.9.1 提醒消息在数据库中的表示
- 10.9.2 创建提醒
- 10.9.3 显示和管理提醒
- 10.9.4 通过轮询实时更新未读计数
- 10.10 用户资料与账户设置
- 10.10.1 编辑用户个人资料
- 10.10.2 自定义头像
- 10.10.3 更改密码
- 10.10.4 设置提醒消息开关
- 10.10.5 将收藏设置为仅自己可见
- 10.10.6 注销账户
- 10.11 首页与探索
- 10.11.1 获取正在关注的用户的图片
- 10.11.2 使用联结和分组查询获取热门标签
- 10.11.3 使用数据库通用函数获取随机图片
- 10.12 使用 Flask-Whooshee 实现全文搜索
- 10.12.1 创建索引
- 10.12.2 搜索表单
- 10.12.3 显示搜索结果
- 10.13 编写网站后台
- 10.13.1 用户管理
- 10.13.2 资源管理
- 10.13.3 面向管理员的用户资料编辑功能
- 10.14 使用 Selenium 进行用户界面测试
- 10.14.1 基本用法
- 10.14.2 准备测试环境
- 10.14.3 编写测试代码
- 10.15 本章小结
第三部分 进阶篇¶
第 11 章 Web API 开发¶
- 11.1 认识 Web API
- 11.2 资源 URL 和版本设计
- 11.2.1 多 API 版本的实现
- 11.2.2 为 API 蓝本禁用 CSRF 保护
- 11.2.3 设置 API 前缀
- 11.2.4 设置 API 子域
- 11.3 使用 HTTP 方法描述操作
- 11.3.1 快捷路由装饰器
- 11.3.2 使用类视图编写 API
- 11.4 使用 JSON 传输资源
- 11.4.1 获取 JSON 请求
- 11.4.2 生成 JSON 响应
- 11.4.3 处理错误响应
- 11.5 使用 Flask-CORS 添加 CORS 支持
- 11.6 使用 APIFlask 开发 Web API
- 11.6.1 基本用法
- 11.6.2 请求的验证与反序列化
- 11.6.3 响应的格式化与序列化
- 11.6.4 资源分页
- 11.6.5 程序错误处理
- 11.6.6 基于令牌的 API 认证
- 11.7 测试 Web API
- 11.7.1 使用 HTTPie 测试 API
- 11.7.2 为 API 编写单元测试
- 11.8 本章小结
第 12 章 性能分析与优化¶
- 12.1 程序性能分析
- 12.1.1 函数性能分析
- 12.1.2 数据库查询性能分析
- 12.2 使用 Flask-Caching 配置缓存
- 12.2.1 缓存视图函数
- 12.2.2 缓存其他函数
- 12.2.3 更新缓存
- 12.2.4 使用 Redis 作为缓存后端
- 12.3 使用 Flask-Assets 优化静态资源
- 12.3.1 注册资源集
- 12.3.2 生成资源集文件
- 12.3.3 在模板中加载资源集
- 12.4 本章小结
第 13 章 部署上线¶
- 13.1 部署方式
- 13.1.1 传统部署
- 13.1.2 容器部署
- 13.1.3 云部署
- 13.1.4 静态部署
- 13.2 基本部署流程
- 13.3 部署前的准备
- 13.3.1 更新程序配置
- 13.3.2 手动导入环境变量
- 13.3.3 设置迁移工具
- 13.3.4 记录程序日志
- 13.3.5 HTTPS 转发
- 13.3.6 安装 WSGI 服务器
- 13.4 传统部署:部署到 Linux 服务器
- 13.4.1 使用 OpenSSH 登录远程主机
- 13.4.2 安装基础库和工具
- 13.4.3 安全防护措施
- 13.4.4 推送代码并初始化程序环境
- 13.4.5 使用 Gunicorn 运行程序
- 13.4.6 使用 Nginx 提供反向代理
- 13.4.7 使用 Supervisor 管理进程
- 13.4.8 更新部署后的程序
- 13.5 容器部署:使用 Docker 进行部署
- 13.5.1 安装 Docker
- 13.5.2 构建程序镜像
- 13.5.3 运行和管理容器
- 13.5.4 配置管理
- 13.5.5 数据持久化
- 13.5.6 镜像分发
- 13.5.7 部署与升级
- 13.5.8 容器编排
- 13.6 下一步该做什么
- 13.7 本章小结
第 14 章 Flask 工作原理与机制解析¶
- 14.1 阅读 Flask 源码
- 14.1.1 获取 Flask 源码
- 14.1.2 如何阅读源码
- 14.2 Flask 的设计理念
- 14.2.1 “微”框架
- 14.2.2 两个核心依赖
- 14.2.3 显式程序对象
- 14.2.4 本地上下文
- 14.2.5 三种程序状态
- 14.2.6 丰富的自定义支持
- 14.3 Flask 与 WSGI
- 14.3.1 WSGI 程序
- 14.3.2 WSGI 服务器
- 14.3.3 中间件
- 14.4 Flask 的工作流程与机制
- 14.4.1 Flask 中的请求 - 响应循环
- 14.4.2 路由系统
- 14.4.3 本地上下文
- 14.4.4 请求与响应对象
- 14.4.5 session
- 14.4.6 蓝本
- 14.4.7 模板渲染
- 14.5 本章小结