文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
本书的组织方式和阅读建议
笔者和身边的一些朋友交流过,大多数人买书来看,基本上都是看到书中讲到了自己一直不太懂的知识点,或者感兴趣的话题。因此,在写作本书时,笔者有意让每章相对独立。你可以选择跳着看,当然更推荐从第 1 章一直看到最后一章,因为本书是按照一个 Web 产品从无到有、从简单变复杂、从基础到进阶的过程编排的。
我们先来大致了解一下这个过程。
- 第 1 章 首先回答两个问题:“为什么应该选择 Python 作为 Web 开发语言”和“选择 Python 2 还是 Python 3”,然后介绍 Python 主流的 Web 框架,并为如何选择给出建议。
- 第 2 章 帮助读者跑起来一个包含本书所讲内容的 Ubuntu 环境,读者可以直接在里面运行书中的例子。限于篇幅,如果想要了解环境搭建的整个过程以及笔者做这些选择的理由,可以在本书源代码项目中的 setup.md 文件中获取,短链接地址为 http://bit.ly/29N4Pqv。接着将展开介绍 Python 的包管理和虚拟环境相关的内容。通过学习这章,读者对 Python 生态环境会有一定了解。
- 第 3 章 先从最简单的 Flask 例子开始,学习一些 Flask 相关的知识,接着学习 Jinja2 和 Mako 模板(Mako 在豆瓣的使用非常广泛),使用 MySQL,最后学以致用,从零开始完成一个相对复杂、在豆瓣有类似功能的文件托管服务。这个项目贯穿本书,在之后的章节中会对它继续扩展。
- 第 4 章 这一章是 Flask 的进阶,包含了大量的 Flask 扩展的使用,还介绍了信号机制和 Werkzeug 的使用。到这里读者对 Flask 和 Web 开发已经入门,可以根据自己的想法自己做一些应用了。
- 第 5 章 现在 Web 端应用对交互的要求很高,移动应用对后端的 API 需求也非常多,需要很好的异构通信方式,本章将介绍笔者对 REST 的理解,并提出一些设计 API 的注意事项,最后通过 jQuery 和 fetch 实现使用 Ajax 的例子,让读者了解如何让前后端通信。
- 第 6 章 我们已经有了有实际业务逻辑的 Web 应用,可是用户还不能访问,本章将介绍如何选择应用服务器,用主流的方式在生产环境中运行这个应用。之前应用中只是使用了 MySQL,在实际的网站应用中,缓存、键值对数据库、NoSQL 数据库都是主流的解决方案,本章将一一介绍为什么要用这种技术以及怎么用。最后作为总结,笔者根据自己的实际经验绘制一张大型网站的架构图,并详细介绍其中模式选择的理由和经验。
- 第 7 章 在第 6 章,Web 应用已经运行起来,用户也可以访问了。但是如下问题也随之出现:
- 应用依赖多个服务,如 MySQL、Redis 等,这些服务器在新环境中的部署是有顺序要求的,而且程序要保证一直在运行状态。
- 上线过程不能自动化。每次上线都要手动执行很多命令,既耗时又容易出错。
- 希望能及时了解和分析服务器和应用的运行状态。
看完本章相信你就可以知道对应的解决方案了。
- 第 8 章 Web 应用运行良好,可是应用的质量还没有保证,如何在上线之前发现更多的 Bug 的需求变得越来越迫切。本章将介绍主流的测试方法,并用一个 GitHub 项目实现持续集成。
- 第 9 章 前面介绍的是 Web 应用必备的内容,从本章开始介绍一些进阶的内容。消息队列能带来更好的用户体验,本章将介绍豆瓣用到的消息队列工具 Beanstalkd,以及 Celery 推荐的消息队列 RabbitMQ。如果 Web 产品有大量的定时任务或者其他异步任务,就可以使用 Python 界最知名的 Celery 解决,本书将从浅入深让读者熟悉 Celery 原理和使用方法,最后分享笔者使用的进阶实践。
- 第 10 章 现在各个大公司都在谈服务化,通过这几年的改造和实践,大家都有自己的一套服务化方案,豆瓣也不例外。本章将告诉读者为什么要服务化、豆瓣的服务化设计,以及使用开源的 Thrift 改造文件托管服务。
- 第 11 章 笔者在工作中经常要给各个业务方提供数据支持,如日志统计分析、数据报表。本章将演示如何使用纯 Python 代码在单个服务器上利用多核实现 MapReduce 功能,还详细讲解豆瓣工程师都在用的 DPark,包含安装、环境配置、使用和框架化分析 UV&PV;接着将展示几个笔者在实际工作中遇到过的数据报表需求,并讲解如何用 Pandas 做数据可视化。
- 第 12 章 这一章将详细介绍 IPython 和 Jupyter Notebook 这两个工具,并分享其在豆瓣对应的实践。除此之外,还列出笔者日常用来排错和调试的工具,包括了解 Linux 服务器的相关情况、性能测试、分析 Python 程序性能瓶颈三个方面。
- 第 13 章 Web 开发日常也会有一些并发编程工作,所以本章以抓取微信公众号文章为主线,分别使用多线程、多进程、Gevent、Future 和 asyncio 这 5 种编程方式完成不同阶段的爬取任务,也深入地分析在它们之间如何选择。
- 第 14 章 Python 进阶并不只针对 Web 开发人员,对于所有 Python 开发者都有意义。本章介绍了一些非常有用的标准库模块,也有笔者对《Python 之禅》的理解和总结的一些语法实践,还讲述了从 Python 3 移植一些有用的功能及编写 Python 扩展等内容。
- 第 15 章 介绍笔者日常进行 Web 开发的流程和经验,还着重介绍了多个代码质量保证工具,以及豆瓣的一些质量保证实践。最后一节,笔者将谈谈代码评审的意义和实际经验。
需要说明的是,章与章以及每章内的节与节之间没有明确的递进关系,不同产品形态让 Web 产品在其发展的不同阶段对技术的选择和侧重点都有所不同。举个例子,并不是前 8 章讲到的内容在产品中都用到了,才能在应用中引入消息队列和 Celery,要根据实际情况灵活选择。在产品发展还没有遇到瓶颈之前就要考虑和尝试引入对应的解决方案,确保不会影响产品高速发展。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论