《Python Web开发实战》预售喽
/ / / 阅读数:329415 年 11 月 19 日,我打开了一个不常用的邮箱,看到了 2 天前编辑给我发的邮件,问我想不想写本 Python 相关的书。
那个时候正是我的黑暗期,一个专注写代码几年的人开始做一些管理工作,一方面要学习,要转换思想,一方面心情也不好,每天就是在处理各种杂事,别说是技术进步了,哪怕把事情考虑周全的时间都没有。每天 一个人当成 2 个人来用,操碎了各种心,很累。
对于我这种写代码的,甚至都不善于逗小孩笑的程序员,总想给女儿点不一样的礼物。希望我带给她一些精神上的帮助。看到邮件的一瞬间,我就想象女儿长大之后,对其他人说:喏,那是我爸写的书,给我做生日礼物...
就是这 2 个理由。我决定写这本书。
12 月 4 日,我提交的大纲顺利通过审核。
12 月 6 日, CODE 真的开源了 ,喜大普奔。我靠着情怀坚持做完了。CODE 那段时间上了 Github Trending,我很欣慰,虽然一切都太晚了。
接下来的 20 多天里面,我正忙着弄 CODE 开源的事情,只是在构思这本书都要有什么内容,并没有下笔。我天真的觉得同时可以把 2 件事做好,但是后来发现时间完全是不够的,所以我停止的 CODE 的进一步的迭代。其他的原因是豆瓣已经决定迁移到 Github 企业版,我一个人并无力改变什么,如果公司自己都不用,那开源的就没有意义了。再则我也受到了厂内很多质疑和嘲讽,心碎。
一些写书的介绍可以看这篇专栏《 写一本技术书籍 》,并建议大家关注这个专栏,近期将有一大波文章要在专栏发呢。
专栏有些结论先发出来:
- 开始写书是在圣诞节左右,结束时间是 8 月 15 日。也就是差不多 240 天。
- 写这本书能让我挣 2W 多,嗯,时薪 23 块钱。
现在开始介绍这本书。
谁应该看本书
看书名可知这是一本 Web 开发相关的书,但事实上里面有大概一半的内容其实是 Python 工程师都能用到的。我对书的受众的理解是:
- Web 开发者
- 运维开发
- 想提高 Python 技能的开发者
- 其他想了解 Python Web 开发的其他开发者
需要注意,阅读本书需要有一定的 Python 基础,因为书中没有基础语法教程,如果你之前没用 Python 写过程序阅读起来可能会受到影响。
为什么值得看
我阅读过大量和 Python 有关的纸质书和开源图书,渐渐学到了很多控制自己 “剁手” 买书的方法。我来分析一下为什么你值得拥有本书。:)
为什么要买书来看?我认为不外乎两个原因:有趣和能学到东西。技术书肯定不会太有趣,那么最重要的就是能学到东西。市面上 Python 相关的书相当多,但是有些内容陈旧或者不符合国情,经常能看到并非开发第一线的人写或者翻译的书,这些书显然价值就要低一些;其次是同质化和向入门级别靠拢,我个人认为市面上关于 Python 入门或者教授语法知识的书不少,而再深入一点的就很匮乏了。
本书有几个特点: 第一,使用了当前主流和前瞻性的技术,如 Docker、Ubuntu 16.04 LTS、Cython、CFFI、Py.test、asyncio、IPython 5.0 LTS 等,书中一部分内容是在 Python 3 下完成的。本书中全部工具都使用当前最新版,能保证在相当长的时间内书中的内容都不会过时。 第二,笔者在国内应用 Python 最大的豆瓣网做产品开发,一直在第一线写代码,大量例子和经验都是根据实际经验出发的。 第三,笔者非常关注 Github 和 Python 社区,会第一时间了解到新的趋势和思想,并在书中体现。举个例子,代码检查工具 pep8 已经在 Guido van Rossum 的要求下改名为 pycodestyle 了。
叔本华在《人生的智慧》中说过一段话,大意是人要么庸俗,要么孤独。笔者认为这个道理在阅读上面也成立:读什么样的书,就会逐渐成为什么样的人。本书提供了很多笔者在其他书中没有看到过的思考方式和 Python 的用法,这也是本书存在的意义。
本书涵盖的内容
第一章.「初识 Python Web 开发」
将回答 Python 工程师关心的如下 3 个问题:
- 为什么应该选择 Python 作为 Web 开发语言?
- 在 Python 2 和 Python 3 之间如何选择?
- 在这么多的 Python Web 框架中哪些是主流的,它们的特点是什么,该如何选择?
第二章. 「Web 开发前的准备」
- 环境的准备,以便读者能够使用 Vagrant 或者 Docker 提供的 Ubuntu 环境运行书中的例子。
- 介绍包管理工具 pip 及一些高级用法。
- 实现 PYPI 的缓存代理和完全镜像。
- 使用 virtualenv 及其扩展实现虚拟环境管理。
第三章. 「Flask Web 开发」
- 通过多个应用例子了解 Flask 框架使用的一些精髓。
- 介绍目前最流行的模板引擎 Jinja2 和 Mako 的使用,以及实践总结和做选择时的建议。
- 通过一些例子让读者熟悉 MySQLdb 的使用,并演示如何和 Flask 应用集成。
- 通过源码帮助读者理解 Flask 的上下文设计,并演示大型应用中使用上下文钩子的例子。
- 通过一个真实的案例学以致用。先分析需求,接着从零开始实现一个文件托管应用。
第四章. 「Flask 开发进阶」
- Flask 的信号机制。利用信号可以实现一部分的业务解耦。
- Flask 的一些常用、主流的扩展,如 Flask-Script、Flask-DebugToolbar、Flask-Migrate、Flask-WTF、Flask-Security、Flask-RESTful、Flask-Admin 和 Flask-Assets。每个扩展都包含至少一个完整的真实例子。
- Flask 的依赖库 Werkzeug 的使用。
第五章. 「REST 和 Ajax」
- 帮助读者理解 REST。
- 学习如何设计一个合理、好用、符合标准的 API。
- 使用 jQuery 和 fetch 分别完成一个前后端交互的 Ajax 应用。
第六章. 「网站架构」
- 了解 WSGI 协议。
- 主流的 Python 应用服务器的特点和使用方法。
- 使用 Nginx 和 Python 应用服务器部署 Flask 应用。
- 介绍豆瓣开源的 Libmc 和豆瓣常用的缓存使用方式。
- 举例说明 Redis 的几个应用场景,包含使用 MessagePack 进行序列化和反序列化工作。
- 介绍使用 NoSQL 的原因和场景。
- 使用 pymongo,并用 Mongoengine 重构文件托管服务的模型。
- MongoDB 索引、高可用和分片的经验。
- 以豆瓣的基础架构为原型,展示主流大型网站的架构模式,并详细介绍相关重要模式,以及 Web 前端的性能优化经验。
第七章. 「系统管理」
- 使用 Supervisor 管理进程。
- 使用 Fabric 进行应用部署。
- 通过部署 Redis 了解配置管理工具 SaltStack 和 Ansible。
- 使用 Psutil 获取系统 CPU、内存、硬盘和网络等信息。
- 配图演示 Sentry 的安装和收集错误信息的效果。
- 使用 StatsD、Graphite、Diamond 和 Grafana 搭建 Web 监控,并介绍常见的运维监控工具及其主要应用场景。
第八章. 「测试和持续集成」
- 介绍和使用 Python 内置测试模块 unittest 和 doctest。
- 介绍和使用第三方测试工具 py.test 和 mock。
- 深入持续集成,并通过 Buildbot 实际地对一个 Github 项目进行集成。
第九章. 「消息队列和 Celery」
- 使用 Beanstalkd。
- 解释 AMQP,深入理解 RabbitMQ,介绍 RabbitMQ 插件系统,RabbitMQ 集群的故障转移方法等。
- 介绍 Celery 的架构,运行起一个真实的应用,在 Flask 应用中使用 Celery 等功能。
- 深入 Celery,介绍 Celery 的依赖及独立用法、Worker 管理、监控等高级功能。
- 笔者总结的一些 Celery 实践经验。
第十章. 「服务化」
- 为什么需要服务化。
- 使用 Thrift 对文件托管服务改造。
- 介绍豆瓣服务化实践 ——PIDL 的起因、基本原理和基本架构。
第十一章. 「数据处理」
- 使用纯 Python 代码实现 MapReduce 功能。
- 配置 DPark 环境,深入了解 DPark,演示如何用 DPark 对业务日志进行 PV 和 UV 的分析。
- 通过发送带有样式和附件的邮件,创建包含带样式和 Sparkline 图表的 xlsx 文件,以及创建包含多工作表和 4. 图表的 xlsx 文件这三个有用的例子,展示笔者对数据报表的理解和运用。
- 基于数据报表中的数据,用 Pandas 进行分析和展示。
第十二章. 「帮助工具」
- 解释为什么应该使用 IPython,配置 IPython、调试复杂代码、并行计算等。
- 介绍 Jupyter Notebook 的用途,配置 Jupyter Notebook,在 Notebook 里使用 Echarts 自定义 JavaScript 和 CSS 样式等高级功能。
- 介绍常用的获得 Linux 服务器相关情况的工具。
- 介绍性能测试工具 Boom 和 tcpcopy,并演示如何搭建一个 tcpcopy 环境。
- 介绍分析 Python 程序性能瓶颈的工具。
- 演示如何定制基于 IPython 的交互解释环境。
- 演示豆瓣东西在 2014 年双十一进行的 Jupyter Notebook 实践。
第十三章. 「Python 并发编程」
使用多线程、多进程、Gevent、Future 和 asyncio 这五种方式实现一个爬取微信公众号的抓取。其中还揭秘了一些写爬虫的经验。尤其是告诉读者如何选择并发方式。
第十四章. 「Python 进阶」
- 介绍 errno、subprocess、contextlib、glob、operator、functools、collections 模块的使用方法。
- 笔者对《Python 之禅》的理解。
- 笔者总结的一些 Python 实践经验,并列举了两篇最佳实践的文章。
- 介绍一些 Python 3 的有用功能,并移植到 Python 2。
- 通过真实的例子演示如何使用 CFFI/Cython 编写 Python 扩展,并对比二者的执行效率。
- 演示使用 PyObjC 发送通知的例子,让开发者收到的通知更有针对性。
第十五章. 「Web 开发项目实践」
- 介绍笔者的 Web 项目开发流程和经验。
- 介绍开源的代码质量保证工具,以及豆瓣的一些质量保证实践。
- 使用 AST 对真实的业务逻辑做静态检查,实现业务流程的检查。
- 谈谈代码评审的意义和实际经验。
PS: 本书还有其他惊喜,我就不打广告了。感谢大家支持,也希望通过本书能让你有所收获。