前言

看完本文你就能明白以下3个问题。

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

Python Web开发

  • Python Web开发介绍
  • 为什么应该选择Python作为Web开发语言
    • 对于Web开发,有很多的编程语言可以选择,为什么应该选择Python呢?
      • 选择 Python 2 还是 Python 3
      • Django 2.0 将不冉支持 Python 2
      • Web框架介绍
    • 小众的Web框架
      • 建议
    • 总结

Python Web开发介绍

你能点进这里那么说明你对Python Web开发是有兴趣的。或者正打算开始学习使用Python做Web 开发,又或者已经是一个Web开发者。那么,用Python做Web开发的人员需要具备哪些技 术能力呢?

这里列了一个清单:
至少熟悉一种Python Web框架。

  • 熟悉Python语法。
  • 熟悉数据库、缓存、消息队列等技术的使用场景、使用方法等。
  • 日常能使用Linux或Mac系统工作。
  • 有性能调优经验,能快速定位问题。
  • 对HTML/CSS/JavaScript有一定了解,有使用经验。

Web开发需要掌握的知识很广,而且对每个知识点都要有深入的了解除此之外。

还要对 业务有深刻理解,并能写出可维护性足够高的代码。

为什么应该选择Python作为Web开发语言

对于Web开发,有很多的编程语言可以选择,为什么应该选择Python呢?

在2016年7月的TIOBE编程语言排行榜(http://bit.ly/2a5jikR )屮,Python已经升至第4位:, 可见Python现在有多么流行 现在无论PC端还是移动互联网的Web开发工.作,对产品做 的各种尝试都需要更快地拿出模型并进行迭代,创业公司尤Python语言更好弛符合K 时代的需求,所以它也受到了越来越多的关注,越来越多的人接受Python,并在生产环境 中使用它.个人认为Python非常适合做Web开发,理由如下:

  1. Python是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性, 同时借鉴了简单脚本和解释型语言的易用性Python IE常适合做快速的原型开发, 很多场景下的性能问题可以通过使用C/C++写Python扩展等方式优化解决’。

  2. Python应用广泛,在大数据、算法、运维等领域都有不错的对应工具和库,W以有 效降低产品流程中不同职位之间的技术壁垒,团队人员的沟通更容易,解决问题也 更快。

  3. Python标准库和第三方的库很强大,有非常多的知名项目都是用Python编写的。

  4. 从 2005 年 Django 开源,2008 年 Reddit 开源,到 2010 年 Flask 开源,Python 用作 Web开发已经有着10多年的历史,国内的豆瓣、搜狐,国外的Reddit. YouTube . Instagram、Pinterest > Bitbucket, Disqus . Dropbox 等公司都选择 Python 作为 Web 开 发的语言(http://bit.ly/28QKXBv ),不用担心Python可靠性与性能问题,因为它已 经经受了时间和大规模用户并发访问的考验。

选择 Python 2 还是 Python 3

首先需要强调的是,编程其实重在对编程思想的理解和经验的积累,Python 2/3的思想基本 是共通的,只有少量的语法有差别甚至不兼容。当对Python熟悉到一定程度时,即使只会 Python 2也可以在很短的时间就能掌握Python 3代码的编写。

Python ft 区曾经于 2014 年初在 python-dev ( http://bit.ly/28RlJDV ), hacker news ( http://bit.ly/ 28RU1YZ)等渠道针对这个问题做过一个调查,部分结果如下(http://bit.ly/28QKyUe):

  1. 97.51%的用户还在写Python 2的代码
  2. 60%的用户在写Python 3的代码
  3. 78.09%的用户史多地写Python 2的代码
  4. 77.09%的川户认可Python 3

有以下主流操作系统已默认使用Python 3:

  • Arch Linux ( http://bit.ly/28RlNDN )
  • Ubuntu 16.04 LTS ( http://bit.ly/28QL8Nm )
  • Fedora ( http://bit.ly/28RUdHy )

Django 2.0 将不冉支持 Python 2

现在Python 2只是在做一些Bug修复、新硬件和操作系统兼容性相关的维护工作,不再右 新的功能加入 但是话说冋来,虽然Python 2只会支持到2020年(http://bit.ly/28QL4ND ), 但是对于生产环境,尤其是重要的应用,不会为了这么一个理由就迁移到Python 3,只能是 在新写的项目中抛开这个历史包袱 所以在未来相当长的时间内,Python 2都会存在 但如 果你愿意拥抱变化,义无反顾地选择Python 3吧 如果是为了满足现在工作中的需要,尤 其是依赖的软件只能运行在Python 2下,那还是首选Python 2

Web框架介绍

Python的Web框架可算是百花齐放,各种框架和微框架数不胜数,关于Python框架孰优孰 劣的讨论一直没冇间断过。这种争论给Web开发工程师们带来了很大的困扰,尤其对初中级的工程师来说,不知道如何选择 本节我们就来介绍当前知名的Web框架的特点及其应 用场景。

主流Web框架

主流的Web框架有以下几种
Django
Django最初是被开发用来管理劳伦斯出版集团旗下一些以新闻内容为主的网站的,它以比 利时的吉普赛爵士吉他f- Django Reinhardt来命名,它和Flask是使用最广泛的Python Web 框架—Django能如此知名很大程度上是因为提供了非常齐备的官方文档,它提供了一站式 的解决方案,包含缓存、ORM、管理后台、验证、表单处理等,使得开发复杂的数据库驱 动的网站变得很简单但正因为它坚持自己对于Web框架的理解,系统耦合度太高,替换 掉内置的功能往往需要花费一些功夫,所以学习曲线也相当陡峭。

Flask
Flask是一个轻量级Web应用框架,它基于Werkzeug实现的WSGI和Jinja2模板引撃.Flask 的作者是Armin Ronacher,本来这只是作者愚人节开的玩笑,但是开源之后却受到 Python程序员的喜爱,目前在GitHub上的Star数量已经超过了 Django它的设计哲学和 Django不同:只保留核心,通过扩展机制来增加其他功能。Flask用到的依赖都是Pocoo团 队开发的。Pocoo团队其他的项目还有Pygments , Sphinx,以及lodgeit Flask的扩展环境非 常繁荣,基本上Web应用的每个环节都有对应的扩展供选择,就算没有对应的扩展也能很 方便地自己实现一个。

Pyramid
Pyramid在国内知名度并不高,主要原因是中文文档匮乏,其高级用法需要通过阅读源代码 获取灵感。尽管被Django和Flask的光芒遮蔽,但是它的性能要比Flask高” Pyramid的灵 感来源于Zope、Pylons 1.0和Django。在我们的传统观点里,小框架通常牺牲了大框架的特 色,反之亦然。但是事实上我们不能真正把控一个应用程序最终的发展情况,而Pyramid在 努力朝着胜任不同级别应用的框架的方向在走。虽然它默认使用Chameleon和Mako模板, 但很容易切换成Jinja2,甚至可以让多种模板引擎共存,通过文件后缀名来识别 豆瓣赞赏 和豆瓣钱包等产品就是基于此框架实现的,代码量级和Flask相同,性能比Flask要略高。

Bottle
Bottle也是一个轻量级的Web框架。它的特点是单文件,代码只使用了 Python标准库,而 不需要额外依赖其他第三方库。它更符合微框架的定义,截止到今天只有4100多行的代码。

Tornado
Tornado全称Tornado Web Server,最初是由FriendFeed开发的非阻塞式Web服务器,现在: 我们看到的是被Fackbook收购后开源出来的版本。它和其他主流框架有个明显的区别:它 是非阻塞式服务器,而且速度相当快,得益于其非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于长轮询、WebSocket等实时Web服务来说, Tornado是一个理想的Web框架。

Web.py
Web.py也是一个微框架,由Reddit联合创始人、RSS规格合作创造者、著名计算机黑客 Aaron Swartz开发。Web.py使用基于类的视图,简单易学却功能强大。

小众的Web框架

Quixote
Quixote 是由美国全国研究创新联合会(Corporation for National Research Initiatives, CNRI ) 的工程师A.M.Kuchling、Neil Schemenauer和Greg Ward开发的一个轻量级Web框架’它简 单、高效、代码简洁。豆瓣的大部分用户产品都使用定制版的Quixote作为Web框架,虽 说这有历史原因(当时Django/Flask等框架还没有出现),但是也证明这个始于2000年的框 架是可以经受时间考验的。它使用目录式的URL分发规则,用Python来写模板。PTL模板 更适合程序员,但是并不适合美工参与前端代码的编写和修改,豆瓣在开发中使用了 Mako 替代PTL不建议在生产环境选用Quixote。

Klein
Klein是Twisted组织开源出来的基于werkzeug和twisted.web的微框架o Flask很不错,但是 不能使用异步非阻塞的方式编程,根本原因是它和Django、Pyramid 一样,都基于WSGI, 而WSGI的接口是同步阻塞的。Klein用法非常像Flask,却可以使用异步的方式开发Web 应用。

选择Web框架时应遵循的原则

介绍了这么多的框架,那么在工作中怎么选择呢?以下是笔者总结的一些原则:

  1. 选择更主流的框架。因为它们的文档更齐全,技术积累要更多,社区更繁盛,能得 到更好的支持。

  2. 关注框架的活跃情况。关注项目的更新频率、Issue和Pull Request (在本书中都简称 PR)的响应情况。如果一个项目已经很长时间没有更新了,或者有一堆的问题需要 解决但是没有得到回应.就不应该将这样的框架放在生产环境中。

  3. 确认选择的框架是否足够满足需求。没有最好的框架,只有最合适的框架。你所选 择的Web框架不仅需要满足当前的需求,也要充分考虑项目发展一段时间之后的情 况,即前瞻性。如果在做选择时有个人喜好这样的因素,需要确认自己有能力对选 择的Web框架提供支持,避免盲目选择而导致将来推倒重来的情况。

  4. 注意媒体时效性。在做选择的时候可能会参考网络上的一些文章,但是需要注意其 发表时间。举个例子,看了一篇2012年的博客,里面说应该选择A而不是B,并给 了多个理由而现在的情形可能已经发生了变化:B经过很久的努力已经做得更优 秀或者2012年之后出现了更优秀的C。

  5. 客观看待媒体的观点。媒体的观点并不一定是正确的(或者不是全部正确),如果不 是官方的说明,就应该保持怀疑和谨慎的态度,取其精华去其糟粕,切勿完全拿来 主义,应该真正做实践验证之后再做决定。

建议

对于上述的Web框架,可以参考如下几条建议:

  1. 如果是为了供演示或者不太考虑长期发展,只是需要用到数据库的CURD操作、写 REST API之类的简单型应用,框架的选择非常宽松,用着顺手的即可。

  2. 如果你初学Web框架,建议选择Flask作为入门框架,学习曲线相对Django而言要 低很多。等熟悉Flask之后再学习Django,就会容易很多。

  3. Pyramid和Django都是面向大型应用的,Pyramid更灵活,开发者空间大得多,值 得考虑。

  4. 网站性能出现问题时,往往问题不只岀在Web框架和编程语言上,做选择时在环境 中按实际产品逻辑测试一段时间即可得到结论,但是不要只相信看到的一些性能对 比文章,尤其不要做无意义的Hello World级别的测试。

总结

关于python web开发的相关介绍就到这了,总之希望有能帮助到各位,这里也整理了一些资料,如果有想要的小伙伴点这里点这里

谢谢看到这里的各位啦,希望各位都能变得更强!要个赞不过分吧!

更多推荐

小白入门Python Web开发介绍(持续更新)