2.4 框架

有许多不同的Python框架可用于开发不同的Python应用。如果是Web应用,可以使用Django(https://www.djangoproject.com/)、Pylons(http://www.pylonsproject.org/)、TurboGears(http://turbogears.org/)、Tornado(http://www.tornadoweb.org/)、Zope(http://www.zope.org/)或者Plone(http://plone.org/)。如果你正在找事件驱动的框架,可以使用Twisted(http://twistedmatrix.com/)或者Circuits(https://bitbucket.org/prologic/circuits/)等。

框架和外部库的主要不同在于,应用程序是建立在框架之上的,代码对框架进行扩展而不是反过来。而外部库更像是对代码的扩展,赋予你的代码更多额外的能力,而框架会为你的代码搭好架子,只需要通过某种方式完善这个架子就行了,尽管这可能是把双刃剑。使用框架有很多好处,如快速构建原型并开发,但也有一些明显的缺点,如锁定(lock-in)问题。因此,在决定使用某个框架前需要把这些都考虑在内。

广告:个人专属 VPN,独立 IP,流量大,速度快,连接稳定,多机房切换,每月最低仅 10 美元

这里推荐的为Python应用选择框架的方法很大程度上类似于前面介绍过的外部库的选择方法,适用于框架是通过一组Python库来进行分发的情况。有时它们还包含用于创建、运行以及部署应用的工具,但这并不影响你采用的标准。前面已经提到过,在已经写了大量代码之后更换外部库是十分痛苦的,但更换框架比这还要难受一千倍,因为通常需要完全重写你的应用程序。举例说明,前面提及的Twisted框架还不能完全支持Python 3。如果你基于Twisted的程序在几年之后想要支持Python 3,那么你将非常不幸,除非全部重写代码选用另一个框架或者有人最终为Twisted提供了Python 3的升级支持。

有些框架与其他框架相比更加轻量级。一个简单的比较就是,Django提供了内置的ORM功能,而Flask则没有。一个框架提供的功能越少,将来遇到问题的越少。然而,框架缺少的每个功能同时也是另一个需要去解决的问题,要么自己写,要么再千挑万选去找另一个能提供这个功能的库。愿意处理哪种场景取决于个人的选择,但需慎重选择。当问题出现时从一个框架升级至其他框架是极其艰巨的任务,就算Python再强大,对于这类问题也没有什么好办法。