在SD2C上的另外一些收获来自于Web应用方面。一个是董洵的GAE讲座,一个是钱宏武关于大型WEB应用的讲座。
钱宏武有一个观点谈到关于技术选型一定要选择那种久经考验资源丰富的 解决方案。比如对于WEB应用来说,PHP就是这样一种靠谱的方案。这个我很赞同,像ASP就是在过去一些年里未能通过考验而可耻滴被淘汰的技术——傍上 MS又如何,现实是残酷的,连MS自己也放弃了ASP。一个朋友有一个ASP做的网站要我帮忙在国外找个虚拟主机空间(国内的虚拟主机商太不靠谱,而且价 格贵得离谱),结果我找了四家比较有名的,只有一家有提供支持ASP的Windows平台。
于是我想到了这两年来我所接触过的Python Web框架:Django, TurboGears, Pylons。因为那天有事急着回市区,没能等到董洵讲座的问答一环节,所以也就没能问一下他的看法。不过按董洵在讲座中的观点来看,他是对Django 是非常推崇的,他自己的网站“好看簿”就是用Django开发的——他说到这个我才想起来07年在土豆的barcamp上见过他。
回上海后在BT妓术群里也讨论了一下这个话题,令狐作《Django到底有什么好?》来谈这个问题。
我 最初接触Python的Web开发就是听Limodou介绍的Django,从0.94版一直用到0.96版。令狐因为之前用过CherryPy,所以比 较倾向于基于CherryPy的TurboGears。不过在经过一段时间的使用之后,我还是决定从Django换到了TG,因为我不喜欢Django独 有的ORM和非XML的模板——虽然这个叫做Jinja的模板引擎的确比TG默认的KID要快得多。不过我用TG也不太喜欢用它默认配置的 SQLObject和KID,而是喜欢SQLAlchemy和Genshi。TG的优点就在于此,你可以按自己的喜好选择使用ORM和/或模板引擎,不会 像Django那样让人感觉受约束。
到了08年,BT妓术群要做新版本狗屎皮网站时,在MK的提议下,我们选择了Pylons——它也像 TG一样是可自由组装的,但是底层是基于Paster而不是CherryPy,二者的优劣我不好评说,但可以肯定的是,Pylons的配置性比TG更好。 但促使我们作出这样的决定的理由却很简单——TG2开始就不再是基于CherryPy而是要改投Pylons门下了,虽然当时TG2还未正式推出(现在也 只到Beta1)。
经过这么一番折腾之后再回头来看这三个框架,感觉就不同了。
Django虽然是一个全包的解决方案,但是它的方案却是经得起考验的——因为据说Django的诞生差不多与RoR同时,也都是基于实际的应用开发需要而被创建出来的,它是一个与RoR类似的方案,但却绝不是仿制品。
TurboGears的想法是很好的,但是因为用到的组件过多,并且千差万别,TG的组合从某种程度上说是比较勉强的,并且不得不因此加了很多比较难看的手法,使用上问题也是比较多的。
Pylons虽然思路与TG类似,但是做法要清爽得多。最关键的是它提供的功能却一点也不差,比如URL映射(REST需要),还有对CACHE的支持等(当然这些Django也都有)。只是用起来麻烦一点。
我虽然用TG做过一些应用,但都是只有几十个用户的小应用。对于实际的大规模应用来说,TG的效能是很可疑的。在这一点上,Django和Pylons都要好得多。
回到前面所说的“久经考验”的问题上。要说Python世界里最久经考验的方案,那大概就要数Zope了,不过那个东东实在是太笨重了,堪比J2EE。
而除了Zope之外,这三个方案(甚至还可以包括RoR等)跟PHP比起来都不能算是久经考验,但如果一定要在这三个里选一个的话,恐怕最后胜出的还会是Django。
不过我觉得要是从趋势上看,Pylons会很有前途——
Limodou在说了《merb的不可知--与uliweb框架的走向》后不久,merb就正式与RoR合并了。如果把RoR比作Django的话,merb就像是Pylons,也许将来在TG2与Pylons正式合并以后,Django也加入进来不是不可能的。