15年11月19日,我打开了一个不常用的邮箱,看到了2天前编辑给我发的邮件,问我想不想写本Python相关的书。
那个时候正是我的黑暗期,一个专注写代码几年的人开始做一些管理工作,一方面要学习,要转换思想,一方面心情也不好,每天就是在处理各种杂事,别说是技术进步了,哪怕把事情考虑周全的时间都没有。每天
一个人当成2个人来用,操碎了各种心,很累。
对于我这种写代码的,甚至都不善于逗小孩笑的程序员,总想给女儿点不一样的礼物。希望我带给她一些精神上的帮助。看到邮件的一瞬间,我就想象女儿长大之后,对其他人说:喏,那是我爸写的书,给我做生日礼物…
就是这2个理由。我决定写这本书。
12月4日,我提交的大纲顺利通过审核。
12月6日,[CODE真的开源了](http://www.dongwm.com/archives/codekai-yuan-
liao/),喜大普奔。我靠着情怀坚持做完了。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: 本书还有其他惊喜,我就不打广告了。感谢大家支持,也希望通过本书能让你有所收获。
版权声明:本文由 董伟明 原创,未经作者授权禁止任何微信公众号和向掘金(juejin.im)转载,技术博客转载采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议
python