Python之美
首发于Python之美
《Python Web开发实战》上市了!

《Python Web开发实战》上市了!

2016.09.15 状态更新,书已经上市了!


2016.11.10 状态更新,这本书已经确定要输出到台湾了

2017.05.08 状态更新,电子版上线,Python Web开发实战-图书 - 博文视点

购买链接:

《Python Web开发实战》(董伟明 著)【简介_书评_在线阅读】 - 当当图书product.dangdang.com图标《Python Web开发实战》 董伟明【摘要 书评 试读】图书www.amazon.cn图标京东《Python Web开发实战》item.jd.com

不要纠结 Python 2 or Python 3

15年11月19日,我打开了一个不常用的邮箱,看到了2天前编辑给我发的邮件,问我想不想写本Python相关的书。

对于我这种写代码的,甚至都不善于逗小孩笑的程序员,总想给女儿点不一样的礼物。希望我带给她一些精神上的帮助。看到邮件的一瞬间,我就想象女儿长大之后,对其他人说:喏,那是我爸写的书,给我做生日礼物…

那个时候正是我的黑暗期,一个专注写代码几年的人开始做一些管理工作,一方面要学习,要转换思想,一方面每天就是在处理各种杂事,别说是技术进步了,哪怕把事情考虑周全的时间都没有。每天一个人当成2个人来用,操碎了各种心,很累。

我想每个程序员都应该写一本属于自己的书,无论是从功利的角度还是人生价值的实现的角度。

就是这三个理由。我决定写这本书。

2015年12月4日,我提交的大纲顺利通过审核。

2015年12月20日,开始写作。

2016年5月24日,写作完成。


在接下来的2个多月时间里就是和编辑、评审老师们进行讨论和修改,甚至重构内容。

2016年8月15日,写作真的完成了。

在「写一本技术书籍」中介绍了一些写书的感想和经验,以及收益。

这篇文章我们来聊得更细一些。


谁应该看本书

看书名可知这是一本Web开发相关的书,但事实上里面有大概一半的内容其实是Python工程师都能用到的。我对书的受众的理解是:

  1. Web开发者
  2. 运维开发
  3. 想提高Python技能的开发者
  4. 其他想了解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了。

我不是网红,认识我的人太少啊 (´・ω・`). 无脑喷子又太多,所以只能写了一篇「我的开源世界观」,介绍我对开源项目的贡献,以及本书成书过程中一些相关的对开源项目提交的Pull Request,给自己拉拉人气儿。

话说这么多牛X的作序竟然没什么人发现,真是让我惊诧啊。。。

叔本华在《人生的智慧》中说过一段话,大意是人要么庸俗,要么孤独。笔者认为这个道理在阅读上面也成立:读什么样的书,就会逐渐成为什么样的人。本书提供了很多笔者在其他书中没有看到过的思考方式和Python的用法,这也是本书存在的意义。

本书涵盖的内容

第一章.「初识Python Web开发」

将回答Python工程师关心的如下3个问题:

  1. 为什么应该选择Python作为Web开发语言?
  2. 在Python 2和Python 3之间如何选择?
  3. 在这么多的Python Web框架中哪些是主流的,它们的特点是什么,该如何选择?

第二章. 「Web开发前的准备」

  1. 环境的准备,以便读者能够使用Vagrant或者Docker提供的Ubuntu环境运行书中的例子。
  2. 介绍包管理工具pip及一些高级用法。
  3. 实现PYPI的缓存代理和完全镜像。
  4. 使用virtualenv及其扩展实现虚拟环境管理。

第三章. 「Flask Web开发」

  1. 通过多个应用例子了解Flask框架使用的一些精髓。
  2. 介绍目前最流行的模板引擎Jinja2和Mako的使用,以及实践总结和做选择时的建议。
  3. 通过一些例子让读者熟悉MySQLdb的使用,并演示如何和Flask应用集成。
  4. 通过源码帮助读者理解Flask的上下文设计,并演示大型应用中使用上下文钩子的例子。
  5. 通过一个真实的案例学以致用。先分析需求,接着从零开始实现一个文件托管应用。

第四章. 「Flask 开发进阶」

  1. Flask的信号机制。利用信号可以实现一部分的业务解耦。
  2. Flask的一些常用、主流的扩展,如Flask-Script、Flask-DebugToolbar、Flask-Migrate、Flask-WTF、Flask-Security、Flask-RESTful、Flask-Admin和Flask-Assets。每个扩展都包含至少一个完整的真实例子。
  3. Flask的依赖库Werkzeug的使用。

第五章. 「REST和Ajax」

  1. 帮助读者理解REST。
  2. 学习如何设计一个合理、好用、符合标准的API。
  3. 使用jQuery和fetch分别完成一个前后端交互的Ajax应用。

第六章. 「网站架构」

  1. 了解WSGI协议。
  2. 主流的Python应用服务器的特点和使用方法。
  3. 使用Nginx和Python应用服务器部署Flask应用。
  4. 介绍豆瓣开源的Libmc和豆瓣常用的缓存使用方式。
  5. 举例说明Redis的几个应用场景,包含使用MessagePack进行序列化和反序列化工作。
  6. 介绍使用NoSQL的原因和场景。
  7. 使用pymongo,并用Mongoengine重构文件托管服务的模型。
  8. MongoDB索引、高可用和分片的经验。
  9. 以豆瓣的基础架构为原型,展示主流大型网站的架构模式,并详细介绍相关重要模式,以及Web前端的性能优化经验。

第七章. 「系统管理」

  1. 使用Supervisor管理进程。
  2. 使用Fabric进行应用部署。
  3. 通过部署Redis了解配置管理工具SaltStack和Ansible。
  4. 使用Psutil获取系统CPU、内存、硬盘和网络等信息。
  5. 配图演示Sentry的安装和收集错误信息的效果。
  6. 使用StatsD、Graphite、Diamond和Grafana搭建Web监控,并介绍常见的运维监控工具及其主要应用场景。

第八章. 「测试和持续集成」

  1. 介绍和使用Python内置测试模块unittest和doctest。
  2. 介绍和使用第三方测试工具py.test和mock。
  3. 深入持续集成,并通过Buildbot实际地对一个Github项目进行集成。

第九章. 「消息队列和Celery」

  1. 使用Beanstalkd。
  2. 解释AMQP,深入理解RabbitMQ,介绍RabbitMQ插件系统,RabbitMQ集群的故障转移方法等。
  3. 介绍Celery的架构,运行起一个真实的应用,在Flask应用中使用Celery等功能。
  4. 深入Celery,介绍Celery的依赖及独立用法、Worker管理、监控等高级功能。
  5. 笔者总结的一些Celery实践经验。

第十章. 「服务化」

  1. 为什么需要服务化。
  2. 使用Thrift对文件托管服务改造。
  3. 介绍豆瓣服务化实践——PIDL的起因、基本原理和基本架构。

第十一章. 「数据处理」

  1. 使用纯Python代码实现MapReduce功能。
  2. 配置DPark环境,深入了解DPark,演示如何用DPark对业务日志进行PV和UV的分析。
  3. 通过发送带有样式和附件的邮件,创建包含带样式和Sparkline图表的xlsx文件,以及创建包含多工作表和4. 图表的xlsx文件这三个有用的例子,展示笔者对数据报表的理解和运用。
  4. 基于数据报表中的数据,用Pandas进行分析和展示。

第十二章. 「帮助工具」

  1. 解释为什么应该使用IPython,配置IPython、调试复杂代码、并行计算等。
  2. 介绍Jupyter Notebook的用途,配置Jupyter Notebook,在Notebook里使用Echarts、自定义JavaScript和CSS样式等高级功能。
  3. 介绍常用的获得Linux服务器相关情况的工具。
  4. 介绍性能测试工具Boom和tcpcopy,并演示如何搭建一个tcpcopy环境。
  5. 介绍分析Python程序性能瓶颈的工具。
  6. 演示如何定制基于IPython的交互解释环境。
  7. 演示豆瓣东西在2014年双十一进行的Jupyter Notebook实践。

第十三章. 「Python并发编程」

使用多线程、多进程、Gevent、Future和asyncio这五种方式实现一个爬取微信公众号的抓取。其中还揭秘了一些写爬虫的经验。尤其是告诉读者如何选择并发方式。

第十四章. 「Python进阶」

  1. 介绍errno、subprocess、contextlib、glob、operator、functools、collections模块的使用方法。
  2. 笔者对《Python之禅》的理解。
  3. 笔者总结的一些Python实践经验,并列举了两篇最佳实践的文章。
  4. 介绍一些Python 3的有用功能,并移植到Python 2。
  5. 通过真实的例子演示如何使用CFFI/Cython编写Python扩展,并对比二者的执行效率。
  6. 演示使用PyObjC发送通知的例子,让开发者收到的通知更有针对性。

第十五章. 「Web开发项目实践」

  1. 介绍笔者的Web项目开发流程和经验。
  2. 介绍开源的代码质量保证工具,以及豆瓣的一些质量保证实践。
  3. 使用AST对真实的业务逻辑做静态检查,实现业务流程的检查。
  4. 谈谈代码评审的意义和实际经验。

其中第九章第三节「使用Celery - Python之美」是样章。我特别选了这一章,因为我看国内玩懂Celery的人实在太少了,就算不买这本书,看看也是好的。


欢迎关注本人的微信公众号获取更多Python相关的内容(也可以直接搜索「Python之美」):

编辑于 2018-02-26

文章被以下专栏收录