2009年8月31日星期一

Python Web Framework

Python Web Framework

---------------------------
LinFeiYu 2009,08,30

感觉 Python web 框架都在向 zope 方向进展。这是最近发现的一个地方。为什么呢?

zope 中有一个叫做注册表的东西,这个注册表分为本地注册表和全局注册表(globalSiteManager),所有的组件不是在本地注册表中就是在全局注册表中,可以通过 Python 代码方式将组件注册到注册表,也可以通过 zcml 文件直接注册组件。虽然有人跟我说过 zcml 中注册的组件是注册到全局注册表中,然而在我学习了 wsgi 中间件之间的调用之后,我发现那个说法应该是错误的。 zcml 中的组件注册应该只是注册到本地注册表,而不是注册到全局注册表!如果开发一个大型的应用的话,每个模块都有其组件注册到注册表上,这样 zope 的注册表将是非常的大的。在 zope组件架构 ( http://www.muthukadan.net/docs/zca.html#adapters ) 中提到:“局部组件是持久化组件,而全局组件是保存在内存之中。全局组件是根据应用的设置进行注册的,而局部组件是在应用启动的时候从数据库中加载到内存的。” 我想这个跟 Windows 的注册表有些神似,不过却不是真正的好方案,Windows 的注册表已经被批得一塌糊涂,比如《Unix编程艺术》中所指出的那样。使用 zcml 配置文件据说也是很多 Python 开发者拒绝 zope 的一个原因。

Django 的发展中也许遇到了类似的问题,它们必须把组件组装到一个地方,让整个框架可以方便地统一管理这些组件。于是,我们看到了 Django 的 admin 模块中也出现了一个类似注册表的东西,这篇文章中: 修正 Django Step by Step 的一些例子 ( http://www.vpsee.com/2009/07/update-examples-in-django-step-by-step/ ) 指出了这个问题。毫无疑问,注册表功能将会在 Django 中越来越多的出现,最后可能走向 zope 的注册表解决方案。

国内 Python 领袖人物之一的 limodou 在其尚未开发完成的 Uliweb 框架中更是使用了一种非常类似 zcml 的解决方案,不同的是作者使用的是 ini 配置文件。具体介绍看这里:第一章 Uliweb介绍 ( http://sites.google.com/site/learninguliweb/home/chapter1 ) 中的 “资源共享的处理方式” 一段。在资源的配置上它应该还没有做到 zope 中那样可以根据 weight 来调整合并资源文件的深度。更不用说 zope 的 viewlet 那样灵活的设计了。

总之,在这些或者非常火爆,或者尚在发展的轮子中,我们还是看到已经存在的设计,或许他们重新造轮子只是想把原来的设计简化而已。。。

今天,无意中看到同事 Youngking 很久以前的一篇文章:又一个框架-bobo ( http://blog.xmu.me/2009/06/14/framework-bob/ ),发表时间是 2009,06,14 ,而文章最后一句话,“这个框架目前还没有正式发布,Jim Fulton声称会在下周一发布。”估计这个东西已经出来很久了,那么有时间一定要去弄来玩玩,或许它带来了很多新的东西。呵呵 :-)

没有评论:

发表评论