内容简介
Flask是在Python用户中为流行的Web开发框架。本书从一个简单的Flask项目入手,由浅入深地探讨了一系列实战问题,包括如何使用SQLAlchemy和Jinja等工具进行Web开发;如何正确地设计扩展性强的Flask应用架构和搭建MVC环境;对于各种NoSQL数据库的特性,何时应该、何时不应该及如何使用它们;通过使用Flask扩展快速实现用户的身份系统、RESTful API、NoSQL查询、后台管理等功能;如何创建自己的扩展;使用Celery编写异步任务,使用py.test进行单元测试等;*后介绍了如何部署上线,包括使用自己搭建的服务器或使用各种云服务,以及如何权衡和选择这些不同的解决方案。
作者简介
译者苏丹,来自山城重庆,毕业于北京师范大学;现豆瓣资深开发工程师,主要开发作品有豆瓣FM等;有多年Python编程实践经验;曾参与《Learning Android中文版》一书翻译。 Jack Stouffer是一位有数年web应用开发经验的程序员。他在两年前将他所有的项目都切换到了Flask。他目前在位于密歇根州奥本山的Apollo America工作,使用Python、Flask和JavaScript编写企业内部业务工具。Jack是开源技术的信徒与支持者,在GitHub上发布以他所推荐的*佳实践原则编写的Flask范例时,立即成为了线上*受欢迎的Flask代码库。Jack还曾经担任Packt Publishing的《Flask Framework Cookbook》一书的审稿人。
目录
第1章 入门 1
使用Git进行版本控制 1
安装Git 1
Git基础 2
使用pip管理Python包 4
在Windows上安装pip 4
在Mac OS X和Linux上安装Python包管理器pip 5
pip基本操作 6
用virtualenv的沙盒管理依赖 7
virtualenv基础 7
开始我们的项目 8
使用Flask Script 9
总结 10
第2章 使用SQLAlchemy创建数据模型 11
设置SQLAlchemy 11
Python安装包 12
Flask SQLAlchemy 12
我们的第1个数据模型 13
创建user表 15
CRUD 16
新增数据 16
读取数据 16
修改数据 19
删除数据 19
数据模型之间的关联 20
一对多 20
多对多 23
SQLAlchemy会话对象的方便之处 25
使用Alembic进行数据库迁移 26
总结 28
第3章 通过模板创建视图 29
Jinja的语法 29
过滤器 30
注释 34
if语句 34
循环 35
宏 36
Flask特有的变量和函数 37
创建视图 38
视图函数 38
编写和继承模板 41
Flask WTForms 45
WTForms基础 46
自定义检验器 48
发布评论 48
总结 51
第4章 使用蓝图创建控制器 52
请求的构建和销毁,以及全局变量 52
错误页面 53
使用类描述视图 53
方法视图 55
蓝图 55
总结 57
第5章 进阶的应用结构 58
模块项目 58
重构代码 59
应用的工厂模式 62
总结 64
第6章 保护应用安全 65
准备工作 65
修改用户模型 65
创建表单 67
创建视图 71
社交网络登录 76
使用会话 84
使用Flask Login 87
用户角色 90
总结 95
第7章 在Flask中使用NoSQL数据库 96
NoSQL数据库的种类 96
键值数据库 97
文档数据库 97
列式数据库 98
基于图的数据库 100
关系型数据库与NoSQL的比较 101
关系型数据库的优势 102
NoSQL数据库的优势 103
在什么情况下用什么数据库 104
在Flask中使用MongoDB 105
安装MongoDB 106
配置MongoEngine 106
定义文档 107
CRUD 112
NoSQL中的关联关系 117
利用NoSQL的强大能力 120
总结 126
第8章 构建RESTful API 127
REST是什么 127
构建RESTful Flask API 130
GET请求 131
格式化输出 132
请求中的参数 135
POST请求 138
身份认证 140
PUT请求 143
DELETE请求 146
总结 147
第9章 使用Celery编写异步任务 148
Celery是什么 148
配置Celery和RabbitMQ 150
在Celery中创建任务 151
运行Celery任务 154
Celery工作流 155
监控Celery 160
在Flower中通过网页进行监控 161
创建一个提醒应用 161
生成每周摘要 163
总结 167
第10章 有用的Flask扩展 168
Flask Script 168
Flask Debug Toolbar 170
Flask Cache 173
缓存函数和视图 174
缓存带参数的函数 175
缓存带有查询参数的路径 177
使用Redis作为缓存后端 177
使用memcached 作为缓存后端 178
Flask Assets 178
Flask Admin 181
编写基础管理页面 182
编写数据库管理页面 184
增强文章管理功能 185
编写文件系统管理页面 187
保护Flask Admin的安全 188
Flask Mail 189
总结 190
第11章 构建你自己的扩展 192
编写一个YouTube Flask扩展 192
创建Python包 196
通过Flask扩展修改响应数据 198
总结 200
第12章 测试Flask应用 201
什么是单元测试 201
怎样进行测试 202
对应用进行单元测试 202
测试路由函数 203
用户界面测试 208
测试覆盖率 213
测试驱动的开发 216
总结 218
第13章 部署Flask应用 219
部署在你自己的服务器上 219
使用fabric把代码推送到服务器 220
使用supervisor运行你的Web服务器 222
Gevent 224
Tornado 225
Nginx和uWSGI 226
Apache和uWSGI 229
部署在Heroku上 230
使用Heroku Postgres 231
在Heroku中使用Celery 232
在AWS上部署应用 233
在Amazon Elastic Beanstalk上使用Flask 233
使用Amazon Relational Database Service 235
在Amazon Simple Queue Service中使用Celery 236
总结 237
前言/序言
《 Python 深度进阶:从原理到实践 》 内容简介: 在快速迭代的软件开发世界中,掌握一门语言的表层语法已不足以应对日益复杂的挑战。真正的精通,在于理解其底层的运作机制,洞察其设计哲学,并能灵活运用各种高级特性解决实际问题。《 Python 深度进阶:从原理到实践 》正是为所有渴望超越 Python 基础,迈向更高层次的开发者量身打造的进阶指南。 本书并非对 Python 语法进行简单的罗列和重复,而是聚焦于 Python 语言的核心概念、内部机制以及高级编程技巧。我们将深入剖析 Python 的对象模型、内存管理、并发机制,以及代码的执行流程,帮助读者建立起对 Python 运行原理的深刻理解。通过揭示这些“幕后故事”,您将能更自信地诊断性能瓶颈、优化代码效率,并撰写出更健壮、更可维护的 Python 程序。 本书特色与内容梗概: 第一部分:Python 核心机制深度剖析 对象与类型系统: Python 的一切皆对象,但对象是如何在内存中表示的?我们不仅会介绍类与实例,更会深入探讨 Python 的动态类型系统,理解可变与不可变对象的区别,以及它们在函数调用和赋值操作中的影响。学习如何利用 `type()`、`isinstance()`、`issubclass()` 等内置函数,以及 `__class__`、`__bases__` 等魔法属性,来审视和操纵对象。 内存管理与垃圾回收: 深入了解 Python 的内存分配策略,包括对象池、栈与堆的概念。我们将详细讲解 Python 的引用计数机制,并揭示其局限性。重点分析 CPython 的垃圾回收器(GC)的工作原理,包括标记-清除算法和分代回收,理解 GC 是如何避免内存泄漏,以及如何通过调整 GC 参数来优化性能。 函数、闭包与装饰器: 函数不仅仅是代码块,更是 Python 中的一等公民。本书将带领读者深入理解函数的参数传递机制(传值、传引用、传对象),探索闭包(closure)的强大之处,理解它如何捕获外部作用域的变量,以及在回调、状态保存等场景中的应用。我们将系统性地讲解装饰器(decorator)的设计模式,从简单的函数装饰到类装饰,理解其背后的“语法糖”—— `wraps` 的作用,以及如何构建自定义的装饰器来简化代码、实现AOP(面向切面编程)。 生成器与迭代器: 掌握生成器(generator)和迭代器(iterator)是 Python 编写高效、内存友好的代码的关键。我们将从迭代器协议(`__iter__` 和 `__next__`)讲起,逐步过渡到生成器函数和生成器表达式,理解它们如何通过 `yield` 关键字惰性地生成数据,从而显著降低内存开销,特别是在处理大数据集时。 上下文管理器与 `with` 语句: 学习如何设计和实现自己的上下文管理器,利用 `__enter__` 和 `__exit__` 方法来优雅地管理资源,例如文件句柄、数据库连接、锁等。深入理解 `with` 语句的工作原理,以及它如何确保资源在使用完毕后得到妥善释放,从而提高代码的健壮性。 第二部分:Python 高级编程范式与实践 元类(Metaclasses): 元类是 Python 中最强大的元编程工具之一。本书将循序渐进地讲解元类的概念,理解类是如何被创建的,以及元类在类创建过程中的作用。我们将通过实际案例,演示如何利用元类实现类级别的逻辑注入、自动注册、API 规范化等高级功能,例如 ORM 框架中的模型定义,或者插件系统的实现。 描述符(Descriptors): 深入理解描述符协议(`__get__`、`__set__`、`__delete__`)及其在 Python 中的应用。我们将揭示数据描述符和非数据描述符的区别,并重点分析 `property`、`staticmethod`、`classmethod` 等内置描述符的实现原理。通过构建自定义描述符,您可以实现属性访问的定制化控制,例如数据验证、惰性加载、权限控制等。 并发与并行: 在多核处理器时代,利用并发和并行提升程序性能至关重要。我们将全面介绍 Python 的并发模型,包括多线程(threading)、多进程(multiprocessing)和异步 I/O(asyncio)。详细对比它们在 CPU 密集型和 I/O 密集型任务中的优劣势,讲解 GIL(全局解释器锁)对多线程性能的影响,以及如何通过多进程绕过 GIL 实现真正的并行。重点讲解 `async`/`await` 语法,理解协程(coroutine)的工作机制,以及 `asyncio` 库如何实现高效的事件循环和异步编程。 设计模式与重构: 本书将精选并实践面向对象设计中常用的设计模式,例如单例模式、工厂模式、观察者模式、策略模式等。我们将从代码示例出发,深入分析每种模式的适用场景、优缺点,以及如何在 Python 中优雅地实现它们。同时,还将介绍代码重构的常用方法和原则,指导读者如何识别代码坏味(code smell),并逐步改进代码结构,提高代码的可读性和可维护性。 性能优化与剖析: 掌握 Python 代码性能优化的核心技巧。我们将介绍多种性能剖析工具,如 `cProfile`、`line_profiler`,指导您如何定位代码中的性能瓶颈。讲解内存优化技巧,如使用 `__slots__` 减少实例内存占用,以及如何通过合理的数据结构选择来提升效率。 本书的价值: 《 Python 深度进阶:从原理到实践 》不仅仅是一本技术书籍,更是一场深入 Python 内核的探索之旅。通过阅读本书,您将能够: 构建坚实的理论基础: 深刻理解 Python 的运作原理,告别“知其然不知其所以然”的困境。 提升代码质量: 编写出更高效、更稳定、更具可维护性的 Python 代码。 解决复杂问题: 运用高级特性和设计模式,从容应对各种棘手的技术挑战。 成为更优秀的开发者: 提升解决问题的能力和技术视野,在职业生涯中更上一层楼。 无论您是正在从初级开发者向中级开发者转型,还是希望在 Python 领域深入钻研,本书都将是您不可或缺的宝贵资源。准备好,与我们一同踏上这场深入 Python 核心的精彩旅程吧!
作为一个对 Web 开发充满热情但又缺乏实践经验的学生党,我一直想找一本能够让我快速上手并建立扎实基础的书。《深入理解 Flask》绝对是我近期最满意的一本书。它不像一些“速成”教程那样只教你写一个简单的“Hello World”,而是非常细致地引导我构建一个完整的 Web 应用。从项目的初始化,到如何配置 Flask 应用,再到处理用户输入和动态生成内容,每一步都讲解得很清晰。我特别喜欢它在讲解表单处理时,不仅教了如何使用 WTForms,还深入分析了 CSRF 防护等安全细节,这让我意识到 Web 开发不仅仅是功能的实现,安全同样重要。书中的异步处理和任务队列的介绍,虽然对我目前的阶段来说还有些超前,但让我看到了 Flask 在处理高并发场景下的潜力,为我未来的深入学习打下了基础。而且,这本书的语言风格非常友好,读起来轻松愉快,不会有枯燥乏味的机械记忆感,感觉作者是真的在用心分享知识,而不是敷衍了事。