时至今日,发展到尽头的Python的Web Framework 可谓是百花齐放,各种micro-framework、framework数不胜数。
python这么多的框架,能全都玩一边,熟知的人不多,下面我就我知道的一些相关知识,做一个简单的总结和浅谈。
一、Django
Django可以说是Python框架中势力最大的一个,他的文档完善、市场占有率最高、招聘的职位也是最多。他的有别于其他框架的地方有:
1、全套的解决方案:Django像Rails一样,提供全套的解决方案(full-stack framework+batteries included),基本要什么有什么(cache,session、feed、orm、geo、auth),这些全部都是django自己造,开发网站必备的工具Django基本都有,因此开发效率高,除了各种问题也有地可寻。
2、强大的URL路由配置,Django让你可以设计出非常优雅的URL,在Django里你基本客户跟丑陋的GET sey bye bye。
3、自助管理后台,admin interface 是Django里比较吸引眼球的一项contrib(捐助、捐献),几乎不用写代码就拥有一个完整的后台管理界面。
但没有十全十美的框架,Django坚持自己造的所有的轮子,整个系统相对封闭。而且:
1、系统紧耦合,如果在使用过程中,觉得自带的内置功能不好用,想用第三方库来扩展是很困难的。比如要用SQLAlchemy或者Mako替换掉ORM、Template几乎是不可能的。Django自带的ORM远不如SQLAlchemy强大,SQLAlchemy是Python世界中的ORM标准,其他框架都支持SQLAlchemy了,唯独Django仍然坚持;Template 功能比较弱,不能插入Python代码,如要写复杂一点的逻辑需要另外用Python实现Tag或者Filter。
2、URL配置虽然强大,但要全部手写,这点跟Rails的Convention over configuration 的理念完全相左,高手和初识Django的人配出来的URL会有很大差异。
3、Python 文件做配置文件,而不是更常见的ini、xml、yaml等形式,这本身不是什么问题,可是因为理论上来说settings的值是动态的改变的,所以不是最佳体现。
4、总的来说,Django大包大揽,用来快速开发以希望Web项目是不错的,但如果你用习惯了Django,你会越用月习惯。但如果不能接收Django的设计哲学,用起来只是徒增痛苦。
二、Pylons
Python框架的另一巨头就是Pylons了(TurboGears2.x是基于Pylons做的,而repoze.bfg也并入了Pylons project 里面)。
Pylons的设计理念和Django完全不同,Pylons本身只有两千行左右的Python的代码,不过他附带一些几乎就是pylons御用的第三方模块。Pylons只是提供一个架子和可选方案,用户可以根据自己的喜好选择Template、ORM、form、auth等组件,系统高度可定制。可以说pylons就是用胶水语言(glue language)设计的胶水框架了。
如果觉得pylons很完美了,如果选择了pylons,那么噩梦也就随之而至了。
噩梦一:学习
Pylons依赖于许多第三方库,他们并不是Pylons所造,学习Pylons的同时还要学习这些库的使用。所以说Pylons 的学习曲线要比Django高的多,而且Pylons的官方文档也一直是人们批评的对象(好在出了The Definitive Guide toPylons )。
Pylons一度被誉为只适合高手使用的Python框架。
噩梦二:调试
不出错误万事大吉,一旦出了错误,因为涉及到了第三方模块太多,所以很难定位到是哪里出了问题,只有用的很熟才能解决此类问题。
噩梦三:升级
安装Pylons需要安装近20几个模块,各有各的版本号。要升级Pylons的版本,哪个模块出了不兼容的问题都有可能,导致升级很难。
Pylons和repoze.bfg 的融合可能会催生下一个能挑战Django地位的框架。
三、Tornado
Tornado 即是一个 Web server ,同时又是一个类Web,py 的micro-framework,作为框架Tornado的思想来源于Web.py
。Web.py 的设计临力求精简keep it simple and poweful,总共没有多少代码,也想Pylons那样依赖大量的第三方模块,而是提供一个框架所必须的一些东西,如:URL路由、Template、数据库访问。
一个框架精简的好处是你可以聚焦在业务逻辑上,而不是用太多精力放在框架本身,但缺点也很明显,许多事情还要亲自操刀。
四、Flask & Bottle
作为新生代Python框架的代表,两个框架都采用了decoretor的方式配置URL路由。
两者和web.py一样,都非常精简,另外Flask和Pylons一样,可以和jinja2、SQLAlchemy之类很好的结合。
Quixote 豆瓣使用开发框架