TurboGears 2.0
2009年05月31日 10:57
前天跟猛禽碰了一下头,讨论了一些狗屎皮项目的问题,其中不可免俗的再次提到了开发框架的选用问题。当然,我坚持认为Pylons是一个很有前途的好框架,但是为它选择各种middleware也是一件非常累的事情。于是我们又想到了Turbogears 2.0,这个基于Pylons的框架。于是去它的网站一看,运气不错,TG2.0正式版5月27号新鲜出炉。于是我当然是非常有兴趣去看一眼了。
TG2的开发团队,显然对这个新的框架很满意。他们说,
TurboGears 2是对TurboGears的再造,它回到了TurboGears的根源。
TurboGears2之于Pylons就相当于Ubuntu之于Debian。
他们想做一个用户体验更好的环境,但是当用户需要更强大的能力时,他们也能提供。实际上他们也基本上做到了这一点(得益于Pylons的优秀架构)。它基本上完全继承了Pylons的一切,只是做了少量的改进(有一部分不能算是改进,只能算是对TG1的兼容性考虑),集成了不少第三方开发包(有一些其实也是TG1已经在用的)。
当然,一些改动也不可避免的造成了开发习惯和风格的变化。下面我就具体的说一说目前我了解到的一些区别。
1. TG2的安装比Pylons稍复杂一些,虽然也使用了virtualenv和初始安装脚本tg2-bootstrap.py(非常类似于Pylons 0.9.7的go-pylons.py),但安装的东西明显多了,而且因为使用了respoze.who作为权限认证框架,必须要安装zope_interface库,而这个库是需要现场编译的(所以在Ubuntu下必须要安装python-dev,安装文档还要求装build-essential,很吓人,不过我实际测试下来build-essential应该不是必需的。)。而且比较奇怪的是,在安装完TG2之后,创建项目时,文档要求你再做一步 python setup.py develop,这个步骤又会补充安装一部分组件。很奇怪,不知道TG2为什么要把组件安装分成两个步骤来做。
2. TG2创建项目的命令是 paster quickstart 而不是 paster create -t turbogears2(不过根据paster的帮助信息显示,后者应该也可以用,具体有什么区别还不知道)。
3. TG2默认会创建一个root.py的controller,而不像Pylons那样用命令新建Controller。而且它的URL是使用TG1风格的expose而不是Pylons的routes。(虽然Routes仍然可用,而且实际上TG2还是基于Routes的)。这个变化会导致TG2的开发风格跟Pylons有所区别。不过对于大多数情况来说,expose确实要比routes简便一些。而且单controller的风格也减少了过度使用Controller的风险。(我个人认为,一个Controller应该是一个大的功能块,比如前台界面是一个controller,后台管理是另一个。在Pylons里因为没有硬性限制和风格导引,有些人会把controller当作功能区分来用,这样其实会比较混乱。TG2的风格导引我认为是比较正确的)
4. 在创建项目的时候,TG2会问你是不是需要使用Authorization和Authentication的功能。如果你选择Yes的话,TG2会自动帮你创建user、group、role等的一套数据模型,并且会产生一个security.py的controller,里面写好一系列差不多算是演示性质的代码。这对于新手而言,当然是比较方便,因为居然有一系列现成可参考的代码在那里。不过,其实我不太喜欢这种做法,你生成出一堆对我来说无用的代码,还要我来修改或者删除,这是何苦来哉。不过,应该是可以在生成的时候选“No”,然后自己手工增加Auth功能,虽然没试过,不过根据我使用Pylons的经验,应该没太大问题。
5. TG2选择了ToscaWidget来做自动生成Form的工作,这个东西,从文档介绍来看,似乎不太合我的胃口。具体使用效果要待观察。不过,大不了我可以不用。
6. TG2的文档比Pylons要好很多,毕竟它是一个“立即上手”类型的框架,对于很多实际开发中的问题都做了阐述和解决。不过大概是2.0刚刚正式推出,文档的完善程度和准确度还需要提高。
7. TG2默认的模板引擎是Genshi而不是Pylons默认的Mako,不过TG2可以相当方便的切换默认模板引擎,Mako也是它默认支持的引擎之一。所以换成Mako是非常方便的。而且TG2还支持多模板引擎混合使用。
目前大概就了解成这样。总体来说,我对这个框架印象还不错,最不济我可以把它完全当作Pylons来用。而它提供的那些集成功能,有多大程度能帮到我,需要进一步做试验。但是我想,完全没用的可能性是不大的。
