新書推薦:

《
无人作战系统
》
售價:NT$
500

《
幼儿园美工区环境创设与活动指导
》
售價:NT$
367

《
李小龙功夫之道
》
售價:NT$
254

《
新民说·哲学家与狼
》
售價:NT$
347

《
海权与陆权的变局
》
售價:NT$
500

《
《西南联大名师课(全10册)》中国历史·中国文学·中国哲学·诸子百家·诗词曲赋·文化常识·人文精神·
》
售價:NT$
3050

《
天命无常:五代十国 优酷人文·“梅毅说中国史”系列(全三册)
》
售價:NT$
704

《
武王墩:亲历2020—2024楚王墓发掘
》
售價:NT$
449
|
| 編輯推薦: |
(1)作者背景资深:作者是Flask官方团队成员,Flask 与 APIFlask 的维护者,戴尔中国卓越研发集团首席软件开发工程师 (2)作者经验丰富:作者对 Flask 有非常深入的研究,熟悉其源代码,拥有丰富的项目实践经验,为包括 Flask 在内的多个开源项目贡献大量代码。 (3)畅销书大升级:本书是畅销书《Flask Web开发实战(豆瓣评分9.1,累计印刷14次)》的升级版,作者历时5年,耗时600多个小时,做了全面的升级。 (4)内容系统全面:从Flask的基础知识到完整的Flask项目实战,从Web API开发到Flask应用的性能优化,从Flask项目的生产部署到Flask的源码解析,本书提供了完整的Python Web工程化学习路径。 (5)实战案例丰富:基础篇的大部分章节都针对相应的知识点提供了完整可运行的示例程序,实战篇则通过2个较为完整的Flask项目讲解了Flask项目的组织方式和技巧,以及Flask开发中各类功能的实现方法和技巧。 (6)技术新颖前瞻:书中的代码和示例程序均基于 Flask 新发布的稳定版 3.x 编写,书中涉及的其他 Python 包和前
|
| 內容簡介: |
这是一本为各水平层次的Python Web开发者提供完整Flask Web开发知识体系的鸿篇巨著,由 Flask 官方团队成员撰写,获得 Flask 之父Armin Ronacher的高度认可和推荐。 本书内容系统全面,从Flask的基础知识到完整的Flask项目实战,从Flask Web API开发到Flask应用的性能优化,从Flask项目的生产部署到Flask的源码解析,本书提供了完整的Python Web工程化学习路径。 本书实战案例丰富,基础篇的大部分章节都针对相应的知识点提供了完整可运行的示例程序,实战篇则通过2个较为完整的Flask项目讲解了Flask项目的组织方式和技巧,以及Flask开发中各类功能的实现方法和技巧。 内容紧跟技术发展,书中的代码和示例程序均基于 Flask 新发布的稳定版 3.x 编写,书中涉及的其他 Python 包和前端库也全部采用当前的新版本,确保本书在未来较长一段时间内仍可保持先进性和实用性。 本书共 14 章,分为三部分: 基础篇(第 1–7 章):通过丰富的示例讲解了 Flask 的核心基础与进阶技巧,为后续学习打下坚实基础。 实战篇(第 8–10 章):通过两个完整项目案例,将 Flask 的知识点融会贯通,带领读者完成从 0 到 1 的开发过程。 进阶篇(第 11–14 章):涵盖基于 Flask 与 APIFlask 的 Web API 开发、性能优化与生产部署,并深入剖析 Flask 的源码实现与核心机制。 本书不仅提供系统的知识讲解和完整的项目源码,还提供丰富的在线资源和活跃的读者社群。只要你了解Python的基本语法,无论你是零基础Web开发爱好者,还是想从事 Python Web 开发的后端工程师、运维工程师、爬虫工程师、数据科学工程师等,抑或是想要从 Django、FastAPI 等其他 Python Web 框架转向 Flask 的 Python 工程师,都能从中获益匪浅。掌握本书,你将不再畏惧任何复杂的Web开发需求,在AI时代构筑自己坚不可摧的核心竞争力。
|
| 關於作者: |
李辉(Grey Li),Flask 与 APIFlask 的维护者,Flask 官方开发团队(Pallets Projects)成员,HelloFlask 与代码厨房社区(CodeKitchen Community)的创建者,微软 Python 方向最有价值专家(Microsoft MVP)。现就职于戴尔中国卓越研发集团,担任首席软件工程师。 他对 Flask 有非常深入的研究,熟悉其源代码,拥有丰富的项目实践经验。热衷于开源软件的应用与推广,曾为包括 Flask 在内的多个开源项目贡献大量代码,并多次在 PyCon China、PyCon US、COSCUP、COSCon、Community Over Code 等技术大会上发表演讲。 你可以在 GitHub(github.com/greyli)上查看他的开源项目,或访问个人网站(greyli.com)了解更多信息。
|
| 目錄:
|
目 录Contents 序 前 言 基础篇 第1章 初识Flask 3 1.1 搭建开发环境 4 1.1.1 创建练习项目目录 4 1.1.2 使用PDM管理虚拟环境和 依赖 4 1.1.3 设置PyPI镜像源 12 1.1.4 安装Flask 13 1.1.5 集成开发环境PyCharm 14 1.2 Hello,Flask! 18 1.2.1 创建程序实例 18 1.2.2 注册路由 19 1.3 开发服务器 21 1.3.1 Run,Flask,Run! 22 1.3.2 程序自动发现机制 23 1.3.3 开启调试模式 24 1.3.4 使服务器对外可见 27 1.3.5 改变默认端口 27 1.3.6 使用PyCharm运行服务器 27 1.4 Flask Shell 29 1.5 Flask扩展 30 1.6 项目配置 31 1.7 视图、URL和端点 32 1.8 Flask命令 33 1.9 模板与静态文件 35 1.10 获取和使用示例程序 35 1.11 本章小结 36 第2章 Flask与HTTP 37 2.1 请求-响应循环 38 2.2 HTTP请求 39 2.2.1 存储请求信息的request对象 42 2.2.2 在Flask中处理请求 44 2.2.3 请求钩子 48 2.3 HTTP响应 50 2.3.1 在Flask中生成响应 51 2.3.2 cookie和session对象 58 2.4 Flask上下文 65 2.4.1 上下文全局变量 65 2.4.2 推送上下文 67 2.4.3 上下文钩子 68 2.5 Web安全防范 69 2.5.1 注入攻击 69 2.5.2 XSS攻击 71 2.5.3 CSRF攻击 74 2.6 小实践:重定向到上一个页面 77 2.6.1 获取上一个页面的URL 78 2.6.2 对URL进行安全验证 80 2.7 本章小结 81 第3章 模板与静态文件 82 3.1 模板的基本用法 83 3.1.1 创建模板 83 3.1.2 模板语法 84 3.1.3 渲染模板 85 3.2 模板的辅助工具 88 3.2.1 模板上下文 88 3.2.2 全局对象 89 3.2.3 过滤器 90 3.2.4 测试器 93 3.2.5 模板环境对象 94 3.3 模板的组织结构 95 3.3.1 局部模板 95 3.3.2 宏 96 3.3.3 模板继承 97 3.4 静态文件 100 3.4.1 添加Favicon 102 3.4.2 使用CSS框架:Bootstrap 103 3.4.3 JavaScript和CSS中的Jinja 106 3.5 消息闪现 108 3.5.1 在视图函数中发送消息 108 3.5.2 在模板中渲染消息 108 3.6 自定义错误页面 110 3.7 使用Bootstrap-Flask简化模板 编写 112 3.8 本章小结 114 第4章 表单 115 4.1 HTML表单 115 4.2 使用WTForms和Flask-WTF 处理表单 116 4.2.1 定义表单类 117 4.2.2 输出表单HTML代码 120 4.2.3 在模板中渲染表单 121 4.3 处理表单数据 124 4.3.1 提交表单 124 4.3.2 验证表单数据 125 4.3.3 在模板中渲染错误消息 129 4.3.4 设置验证错误消息的语言 131 4.4 自定义验证器 132 4.4.1 验证方法 132 4.4.2 全局验证器 133 4.5 使用Bootstrap-Flask快速渲染 表单 134 4.5.1 渲染表单字段 135 4.5.2 渲染整个表单 136 4.5.3 渲染表单行 137 4.5.4 设置提交按钮的样式 137 4.6 本章小结 139 第5章 数据库 140 5.1 数据库分类 140 5.1.1 SQL 140 5.1.2 NoSQL 141 5.1.3 如何选择数据库 142 5.2 ORM魔法 142 5.3 安装和初始化Flask- SQLAlchemy 144 5.4 连接数据库服务器 145 5.4.1 连接到SQLite 146 5.4.2 连接到MySQL 147 5.4.3 连接到PostgreSQL 148 5.5 定义SQLAlchemy模型类 148 5.5.1 定义表名 149 5.5.2 定义字段 150 5.5.3 定义__repr__()方法 154 5.6 创建数据库表 155 5.7 数据库操作 156 5.7.1 会话 156 5.7.2 插入新记录 157 5.7.3 获取记录 158 5.7.4 过滤记录 162 5.7.5 更新记录 168 5.7.6 删除记录 168 5.8 配置Python Shell上下文 169 5.9 定义关系 169 5.9.1 一对多 170 5.9.2 多对一 177 5.9.3 一对一 178 5.9.4 多对多 179 5.9.5 基于只写加载器(Write-only Loader)获取集合关系记录 185 5.9.6 是否使用外键 187 5.10 更新数据库表与数据迁移 188 5.10.1 重新生成表 188 5.10.2 使用Flask-Migrate迁移 数据库 189 5.10.3 开发时是否需要进行迁移 193 5.11 数据库高级实践 193 5.11.1 级联操作 193 5.11.2 事件监听 197 5.11.3 外键ON DELETE级联 199 5.12 使用Faker生成虚拟数据 199 5.13 小练习:编写一个记事本 程序 202 5.13.1 创建笔记 204 5.13.2 显示笔记列表 205 5.13.3 更新笔记 207 5.13.4 删除笔记 208 5.14 本章小结 211 第6章 自动化测试 212 6.1 了解自动化测试 212 6.2 Flask测试客户端 213 6.3 使用unittest编写单元测试 215 6.3.1 Flask程序的测试固件 215 6.3.2 为测试创建程序上下文 217 6.3.3 编写测试用例 218 6.3.4 运行测试 220 6.4 测试Flask命令 221 6.5 使用coverage.py计算测试 覆盖率 223 6.5.1 基本用法 223 6.5.2 获取测试覆盖率 225 6.5.3 使用pytest-cov集成 coverage.py 227 6.6 使用Ruff优化代码风格 228 6.6.1 代码风格检查 228 6.6.2 代码格式化 231 6.7 类型标注 232 6.8 本章小结 235 第7章 常用Flask开发技巧 237 7.1 使用Flask-Mailman发送电子 邮件 237 7.1.1 配置Flask-Mailman 238 7.1.2 构建邮件数据 241 7.1.3 发送邮件 242 7.1.4 发送多封邮件 243 7.1.5 提供HTML格式的邮件 正文 244 7.1.6 使用模板组织邮件正文 246 7.1.7 异步发送邮件 248 7.2 使用AJAX发送异步请求 249 7.2.1 认识AJAX 250 7.2.2 使用Fetch API发送AJAX 请求 251 7.2.3 处理AJAX请求 254 7.2.4 处理AJAX响应 255 7.3 使用Flask-WTF上传文件 257 7.3.1 定义上传字段 257 7.3.2 渲染上传表单 258 7.3.3 处理上传文件 259 7.3.4 查看和下载上传文件 261 7.3.5 上传多个文件 263 7.4 使用Flask-CKEditor集成富文本 编辑器 264 7.4.1 引入CKEditor JavaScript 资源 265 7.4.2 定义CKEditor编辑器字段并 渲染 266 7.4.3 配置CKEditor编辑器 267 7.4.4 获取编辑器字段数据并 渲染 269 7.4.5 使用Bleach进行HTML 安全清理 269 7.4.6 上传图片 271 7.5 使用CSRFProtect实现CSRF 保护 273 7.5.1 设置CSRF令牌 274 7.5.2 处理CSRF错误 276 7.6 使用Flask-DebugToolbar调试 程序 277 7.7 本章小结 279 实战篇 第8章 项目组织 283 8.1 基本项目组织技巧 283 8.1.1 使用包组织代码 284 8.1.2 在文件中存储程序配置 284 8.1.3 注册视图函数到程序实例 285 8.1.4 使用绝对导入 286 8.1.5 运行使用包组织的程序 287 8.1.6 创建子包 287 8.2 使用蓝本模块化程序 288 8.2.1 创建蓝本 288 8.2.2 装配蓝本 289 8.2.3 注册蓝本 291 8.2.4 蓝本的路由端点 292 8.2.5 蓝本静态文件和模板 293 8.2.6 蓝本嵌套 294 8.3 组织程序配置 295 8.3.1 从环境变量中读取配置 296 8.3.2 使用python-dotenv管理环境 变量 297 8.3.3 使用Python类组织程序 配置 299 8.4 使用工厂函数创建程序实例 300 8.4.1 初始化扩展 301 8.4.2 组织工厂函数 302 8.4.3 创建程序入口脚本 303 8.4.4 使用current_app获取程序 实例 305 8.5 组织测试 305 8.6 项目组织架构 307 8.6.1 功能式架构 307 8.6.2 分区式架构 308 8.6.3 如何选择组织架构 309 8.7 本章小结 310 第9章 程序实例:个人博客 311 9.1 Web程序开发流程 312 9.1.1 程序功能设计 313 9.1.2 前端页面开发 314 9.1.3 后端程序开发 317 9.1.4 部署上线 318 9.2 编写程序框架 318 9.2.1 创建数据库模型 320 9.2.2 邻接列表关系 323 9.2.3 生成虚拟数据 325 9.2.4 模板文件 329 9.2.5 基模板 330 9.2.6 模板上下文 332 9.2.7 视图函数 333 9.2.8 单元测试 334 9.3 渲染导航链接 335 9.4 实现Flash消息分类 337 9.5 日期和时间的本地化 338 9.5.1 存储UTC时间 339 9.5.2 使用Day.js渲染日期和 时间 339 9.5.3 渲染不同语言的时间 341 9.5.4 渲染日期时间 341 9.5.5 渲染相对时间 343 9.6 编写博客前台 345 9.6.1 分页显示文章列表 345 9.6.2 显示文章正文 352 9.6.3 文章固定链接 353 9.6.4 显示分类文章列表 357 9.6.5 显示评论列表 358 9.7 文章评论与回复 361 9.7.1 发送评论提醒邮件 361 9.7.2 创建评论表单 363 9.7.3 发表评论 364 9.7.4 支持回复评论 366 9.8 网站主题切换 368 9.9 创建管理员用户 370 9.9.1 安全存储密码 370 9.9.2 创建用户命令 373 9.10 使用Flask-Login管理用户 认证 374 9.10.1 获取当前用户 376 9.10.2 登录表单 377 9.10.3 登录用户 377 9.10.4 登出用户 379 9.10.5 视图保护 379 9.10.6 在单元测试中认证 381 9.11 编写博客管理后台 382 9.11.1 文章管理 384 9.11.2 评论管理 395 9.11.3 分类管理 401 9.12 本章小结 403 第10章 程序实例:图片社交 网站 404 10.1 程序功能与数据库设计 405 10.1.1 数据库模型与虚拟图片 407 10.1.2 模板和静态文件 409 10.1.3 使用Bootstrap图标 410 10.2 用户注册与验证 411 10.2.1 实现用户注册 412 10.2.2 使用JWT进行邮箱验证 414 10.2.3 使用装饰器过滤未确认 用户 418 10.2.4 密码重置 420 10.3 基于用户角色的权限管理 423 10.3.1 角色与权限模型 423 10.3.2 设置角色和权限 425 10.3.3 写入角色和权限 426 10.3.4 验证用户权限 429 10.4 使用Flask-Dropzone优化文件 上传功能 431 10.4.1 配置Flask-Dropzone 432 10.4.2 渲染上传区域 434 10.4.3 处理并保存上传图片 435 10.5 使用Flask-Avatars处理用户 头像 442 10.5.1 使用默认头像 443 10.5.2 生成随机头像 443 10.6 图片展示与管理 445 10.6.1 在用户主页显示图片 列表 446 10.6.2 图片详情页 450 10.6.3 上一张和下一张跳转 451 10.6.4 删除确认模态框 452 10.6.5 举报图片 455 10.6.6 图片描述 456 10.6.7 图片标签 459 10.6.8 用户资料弹窗 463 10.7 图片收藏 469 10.7.1 添加和取消收藏 470 10.7.2 收藏者和收藏页面 473 10.8 用户关注 476 10.8.1 自引用的多对多关系 476 10.8.2 关注与取消关注 477 10.8.3 显示关注用户列表 481 10.8.4 使用AJAX在弹窗中执行 关注操作 483 10.9 消息提醒 489 10.9.1 提醒消息在数据库中的 表示 489 10.9.2 创建提醒 490 10.9.3 显示和管理提醒 491 10.9.4 通过轮询实时更新未读 计数 494 10.10 用户资料与账户设置 496 10.10.1 编辑用户个人资料 497 10.10.2 自定义头像 498 10.10.3 更改密码 504 10.10.4 设置提醒消息开关 506 10.10.5 将收藏设置为仅自己 可见 507 10.10.6 注销账户 508 10.11 首页与探索 510 10.11.1 获取正在关注的用户的 图片 511 10.11.2 使用联结和分组查询 获取热门标签 513 10.11.3 使用数据库通用函数 获取随机图片 514 10.12 使用Flask-Whooshee实现 全文搜索 516 10.12.1 创建索引 517 10.12.2 搜索表单 518 10.12.3 显示搜索结果 519 10.13 编写网站后台 521 10.13.1 用户管理 522 10.13.2 资源管理 525 10.13.3 面向管理员的用户资料 编辑功能 526 10.14 使用Selenium进行用户界面 测试 528 10.14.1 基本用法 529 10.14.2 准备测试环境 530 10.14.3 编写测试代码 532 10.15 本章小结 534 进阶篇 第11章 Web API开发 537 11.1 认识Web API 537 11.2 资源URL和版本设计 540 11.2.1 多API版本的实现 541 11.2.2 为API蓝本禁用CSRF 保护 542 11.2.3 设置API前缀 543 11.2.4 设置API子域 543 11.3 使用HTTP方法描述操作 544 11.3.1 快捷路由装饰器 546 11.3.2 使用类视图编写API 546 11.4 使用JSON传输资源 547 11.4.1 获取JSON请求 549 11.4.2 生成JSON响应 549 11.4.3 处理错误响应 551 11.5 使用Flask-CORS添加CORS 支持 553 11.6 使用APIFlask开发Web API 554 11.6.1 基本用法 555 11.6.2 请求的验证与反序列化 558 11.6.3 响应的格式化与序列化 562 11.6.4 资源分页 564 11.6.5 程序错误处理 566 11.6.6 基于令牌的API认证 567 11.7 测试Web API 571 11.7.1 使用HTTPie测试API 572 11.7.2 为API编写单元测试 574 11.8 本章小结 575 第12章 性能分析与优化 576 12.1 程序性能分析 576 12.1.1 函数性能分析 577 12.1.2 数据库查询性能分析 578 12.2 使用Flask-Caching配置缓存 580 12.2.1 缓存视图函数 581 12.2.2 缓存其他函数 582 12.2.3 更新缓存 583 12.2.4 使用Redis作为缓存 后端 585 12.3 使用Flask-Assets优化静态 资源 586 12.3.1 注册资源集 587 12.3.2 生成资源集文件 588 12.3.3 在模板中加载资源集 589 12.4 本章小结 591 第13章 部署上线 592 13.1 部署方式 592 13.1.1 传统部署 592 13.1.2 容器部署 593 13.1.3 云部署 593 13.1.4 静态部署 593 13.2 基本部署流程 594 13.3 部署前的准备 595 13.3.1 更新程序配置 595 13.3.2 手动导入环境变量 596 13.3.3 设置迁移工具 597 13.3.4 记录程序日志 597 13.3.5 HTTPS转发 601 13.3.6 安装WSGI服务器 602 13.4 传统部署:部署到Linux 服务器 602 13.4.1 使用OpenSSH登录远程 主机 603 13.4.2 安装基础库和工具 603 13.4.3 安全防护措施 605 13.4.4 推送代码并初始化程序 环境 608 13.4.5 使用Gunicorn运行程序 609 13.4.6 使用Nginx提供反向代理 611 13.4.7 使用Supervisor管理进程 614 13.4.8 更新部署后的程序 617 13.5 容器部署:使用Docker进行 部署 618 13.5.1 安装Docker 618 13.5.2 构建程序镜像 619 13.5.3 运行和管理容器 624 13.5.4 配置管理 626 13.5.5 数据持久化 627 13.5.6 镜像分发 628 13.5.7 部署与升级 630 13.5.8 容器编排 631 13.6 下一步该做什么 633 13.7 本章小结 635 第14章 Flask工作原理与机制 解析 636 14.1 阅读Flask源码 636 14.1.1 获取Flask源码 637 14.1.2 如何阅读源码 637 14.2 Flask的设计理念 646 14.2.1 “微”框架 646 14.2.2 两个核心依赖 646 14.2.3 显式程序对象 646 14.2.4 本地上下文 647 14.2.5 三种程序状态 647 14.2.6 丰富的自定义支持 649 14.3 Flask与WSGI 649 14.3.1 WSGI程序 650 14.3.2 WSGI服务器 652 14.3.3 中间件 653 14.4 Flask的工作流程与机制 654 14.4.1 Flask中的请求-响应 循环 654 14.4.2 路由系统 659 14.4.3 本地上下文 664 14.4.4 请求与响应对象 674 14.4.5 session 676 14.4.6 蓝本 684 14.4.7 模板渲染 687 14.5 本章小结 690 附录 Flask资源 691
|
| 內容試閱:
|
Prologue序 距离这本书的前身《Flask Web开发实战:入门、进阶与原理解析》(2018年)上市已经过去七年多。在这段时间里,Python、Flask及许多Python库都发生了很大的变化,这让撰写这个升级版变得更加困难。除了需要了解这些项目的新变化并更新书中的内容外,我还需要同步升级相应的示例程序。同时,我还参与了许多与这本书内容密切相关的开源项目的维护工作,包括帮助修复Flask扩展的问题、发布新版本,以及维护Flask、APIFlask、Bootstrap-Flask等项目。 除此之外,我在2022年初结束了自由职业的状态,开始了第一份全职工作。在很长一段时间里,我需要在工作和日常生活之外挤出时间用于写作和维护开源项目。因此,这本书的撰写进度变得越来越缓慢,甚至常常中断数天。自2020年4月开始写作以来,在无数次焦虑和振作的反复中,我终于在600个小时的艰难写作后完成了这本书。这让我不用再因为前作中某些过时的内容可能会给读者带来困扰而纠结,也不用再时时想到自己身上背负的这个巨大的“未完成”。 这两本书见证了我的成长:从一名Flask学习者,到许多Flask扩展项目的创建者和贡献者,再到加入Flask开发团队成为Flask的维护者。我很荣幸能够通过撰写这两本书和参与开源项目为Python和Flask社区的发展作出贡献。我也很高兴我的书能给读者在爱好或事业上带来助益。 在此感谢所有新老读者的支持!本书的完成离不开你们一直以来的“催更”和关注。希望这本书能够让你的某些想法变为现实,或为你带来一些新的机会。也希望你能慷慨地分享自己的代码、经验和思想,因为你正和其他人一样,用自己的方式改变着这个世界。欢迎加入这场有趣的Flask之旅。祝你好运!
李辉(Grey Li)
前 言Preface 根据近几年的Python开发者报告,Flask(图1)是目前最流行的Python Web框架之一。自2010年开源以来,Flask受到了越来越多Python开发者的喜爱。
图1 Flask的logo Flask仅保留了Web框架的核心,其他功能都交由扩展来实现。如果没有合适的扩展,你也可以自己动手开发。Flask不会替你做决定,也不会限制你的选择。它足够轻量,你可以用5行代码编写出一个最简单的Web程序,但并不简陋,因为它能够适应各类项目的开发 需求。 因为Flask的灵活性,越来越多的公司选择将它作为Web框架。使用Flask的知名公司在国外有Microsoft、IBM、Netf?lix、Dell、Reddit、Twilio、Mailgun等,在国内有豆瓣、联想、果壳、下厨房等。2021年,NASA在Ingenuity直升机的操作系统中使用Flask开发了对地数据系统(Ground Data System,GDS)。这说明Flask能应对大型项目的挑战,适应各种需求。 你可以在StackShare上查看使用Flask的公司列表( />在国内,越来越多的Python程序员开始关注和学习Flask,但是相关书籍仅有一两本,内容较为陈旧且单薄,希望本书可以填补这一空白。本书提供了学习Flask的完整路径,从基础内容、进阶实践到源码分析。同时安排了丰富的示例程序,读者可以通过亲自实践更快地掌握Flask开发的相关内容。 目标读者 在技术层面,本书适合所有Python程序员(了解Python基础语法即可)阅读,包括已经学习过其他Python Web框架(如Django)的读者和从未接触过Web框架的读者。 在难度层面,本书适合新手和有一定基础的读者阅读。新手可以在这里学习Flask的基础内容,并通过丰富且完善的实例掌握Flask开发的各个方面;有基础的读者则可以通过阅读和实践进阶内容进一步提升Flask开发能力。 综上所述,本书适合以下几类读者阅读: 了解Python基本语法,想要自己动手开发网站的编程爱好者。 熟悉Python,想从事Python Web开发的后端工程师、运维工程师、爬虫工程师、数据科学工程师等。 想要从Django、FastAPI等其他Python Web框架转向Flask的Python工程师。 本书主要特点 本书有以下3个显著特点。 1.内容全面 本书内容覆盖了Flask Web开发的完整路径:从基础知识的学习,到不同类型和不同复杂程度程序的编写,再到代码的测试优化及Flask源码分析;从基础的内容管理,到用户认证和权限管理,再到Flask与JavaScript的数据交互、Web API的编写等。 2.实践丰富 本书包含大量代码片段,并附带多个完整可运行的示例程序。本书基础篇的大部分章节提供了相应的示例程序;实战篇则通过介绍两个较为完善的Flask项目来讲解各方面的进阶知识。将各类知识融入实际的项目开发实践中,可以使你更直观地了解具体的代码实现,并将其快速应用到实际开发中。 3.内容最新 本书内容紧跟最新技术进展。书中的代码和示例程序均基于Flask最新发布的稳定版3.x编写。书中涉及的其他Python包和前端库也全部采用最新版本。这些特点可以确保书中的内容在一定时间内保持实用(后续所有关键变更可在本书主页 />本书核心内容 本书共14章,分为基础篇、实战篇和进阶篇三篇,各章节均经过精心设计,力求让读者循序渐进地掌握Flask开发的基础知识和技巧。 基础篇(第1~7章)介绍Flask开发的基础知识。 第1章搭建开发环境,通过一个最简单的 Flask 程序来帮助读者了解Flask的基本运作方式及相关概念。 第2章介绍Flask与HTTP的交互方式及相关的Flask功能特性。 第3章介绍模板与静态文件的基本用法和一些常用技巧。 第4章介绍在 Web 程序中处理表单的方法和技巧。 第5章介绍如何为 Flask 程序添加数据库支持,包括数据库分类、连接数据库服务器、创建数据库表、数据库操作、定义关系、更新数据库表与数据迁移等内容。 第6章介绍如何使用 Flask 编写自动化测试,包括编写单元测试、运行测试、计算测试覆盖率、优化代码风格等。 第7章介绍常用的Flask开发技巧,包括发送电子邮件、使用AJAX发送异步请求、上传文件、集成富文本编辑器等。 实战篇(第8~10章)首先介绍项目组织的基础知识,然后通过两个程序实例介绍Flask开发中各类功能的实现方法和技巧。 第8章介绍Flask项目的组织方式和技巧,包括蓝本、配置管理、工厂函数、组织架构等方面。 第9章通过编写个人博客程序Greybook学习Flask开发的基本流程,包括渲染导航链接、Flash消息分类、日期和时间的本地化、文章评论与回复、用户认证、博客前后台管理等。 第10章通过编写图片社交网站程序Moments学习进阶的Flask开发技巧,包括用户注册与验证、用户权限管理、文件上传功能优化、用户头像处理、图片展示与管理等内容。 进阶篇(第11~14章)介绍Web API的开发流程、Flask程序的部署流程,包括性能优化和上线部署,以及解析Flask源码与运行机制。 第11章介绍Web API及如何使用APIFlask开发Web API。 第12章介绍对Flask程序进行性能优化的主要措施,包括函数和数据库查询的性能分析、缓存配置以及静态资源优化等。 第13章介绍部署Flask程序前的准备工作及两种主流的部署方式:传统部署(部署到Linux服务器)和容器部署(使用Docker部署)。 第14章:介绍Flask的一些设计理念、底层WSGI的相关实现,并对各个主要功能点进行源码分析。 此外,本书在附录中补充介绍了一些与Flask学习相关的资源,供读者参考。 阅读前的准备 在开始Flask之旅前,还有一些准备工作要做。首先,你需要一台安装了Python 3.9( />其次,本书有大量操作需要在命令行界面(Command Line Interface,CLI)中进行,所以你需要熟悉所用操作系统的命令行(Shell)程序。书中在涉及操作系统特定命令时会给出提示,Windows系统对应的命令为PowerShell,Linux和macOS系统则对应Bash。 最后,你需要对HTML、CSS和JavaScript有基本的了解,它们分别作为Web页面的结构层、表现层和行为层,是Web开发的基础。任何一个Web程序都是由一个或多个Web页面组成的,这些页面包含内容以及按钮、表单等交互组件。在本书中,我们会使用Flask操作HTML页面;为了让HTML页面更加美观,我们会使用CSS定义样式;为了简化样式的编写,我们会使用CSS框架,例如Bootstrap( />在Web开发中,大部分程序离不开JavaScript。JavaScript可以方便、简洁地实现很多页面逻辑和功能。但是因为本书的重点是Flask,所以会尽量避免使用过多的JavaScript代码。 如果你还不熟悉这些内容,可以通过以下网站快速入门: Google Web.dev学习课程( />W3Schools( />MDN Web入门文档( />the_web)。 如果一本厚书让你感到有些压力,那么你可以先从我撰写的在线教程“Flask入门教程”( />排版约定 Windows系统中的命令提示符为“>”,而Linux或macOS系统中的命令提示符为“$”。本书中将统一使用美元符号(“$”)作为命令提示符,例如: $cd hello 命令提示符为3个大于号(即“>>>”),表示Python Shell中输入的代码,例如: >>>import os “$”或“>>>”标记的文本下方没有命令提示符的文字表示输出内容,无须输入,例如: $cat hello.txt Hello,Flask! 为了节省篇幅,书中的代码片段未严格遵循PEP8的约定,例如类与函数之间的空行、函数与导入语句之间的空行均缩减为1行。此外,已出现过的导入语句和无关的代码块会被省略。此外,代码中重复或不相关的部分均以省略号表示,例如: def do_something(): #... if foo: return False return True 代码、命令或URL中有时会使用“<”和“>”来标识演示内容,在实际输入中并不需要写出,例如 />示例代码会引入一些随机字符作为填充内容,这些随机字符通常遵循以下习惯。 列表1:spam、ham、eggs。 列表2:foo、bar、baz、qux、quux、quuz、corge、grault、garply、waldo、fred。 人名会使用Grey Li或grey。 网站将使用hellof?lask.com或example.com。 其他需要读者自行修改的占位字符将使用类似于your_password、your_email的文本。 读者反馈与疑问 由于水平有限,编写时间较为仓促,本书难免存在错误或不够全面之处,在此恳请读者朋友批评指正。 本书勘误地址为 />本书的配套资源索引可在本书主页( />关于学习Flask时产生的疑问,可以在代码厨房论坛( />关注作者 如果你想了解关于本书或笔者其他作品的新动态,欢迎关注我的Twitter/X(@greylihui)、豆瓣( />致谢 感谢为本书提供技术审阅的朋友们:余彦永(yuxiaoy)、黎文翀、明希、温立强、王易、景天一。他们从新老读者的视角提供了许多改进建议和反馈。 感谢Armin Ronacher(Flask作者)、David Lord(Flask开发团队首席维护者)以及其他所有开源贡献者创造了这一切,感谢在Stack Overf?low、GitHub、Reddit和Wikipedia等网站贡献知识的互联网居民们。 感谢父母和奶奶在这段时间里的支持与帮助,也感谢妻子魏瑶和弟弟家辉给予的鼓励与陪伴。
|
|