最近django的邮件列表热烈讨论一个叫做 apps repository 的东西。就是建立一个保存用户提交的 app 的统一的存储中心。
我想这么一个东西的存在一定程度上是直接得益于 django 的一些优秀的设计:
在 django 中一个 project 由多个 app 组成,一个 app 由相关的 urls、views、models、templates、templatetags(自定义的模版标签) 等组成,一个 app 就是一个文件夹,一个包,一个重用单位。而 pylons 等框架是将所有 controllers (对应django的views) 放一处、 所有 models 放一处、所有 templates 放一处。相比之下,django 提供一个相对 project 更小粒度的 app 成为重用的最小单元,使得代码重用变得更为方便。
这样一个好机制其实是得益于 django 中许多细节上的设计的,比如 url dispatcher 的 include 机制,使 app 可以独立设计自己的 urls ;灵活的可扩展的 template 加载机制使 app 可以和自己的模版、自定义模版标签一起分发;...;最后还有最重要的一点原因就是:django "一块式" 的设计哲学。因为这些便利都是基于一个前提的,那就是:这些 app 使用着同一套url dispatcher,同一套模版引擎,同一套 orm 等。
目前 django 代码里面 contrib 目录下那些东西,就是些可重用的 app 。 简单如 sites 的,只有一个 models(和相关的managers); 更复杂一些如 comments 的,便连 views、templates 也都有了;还有庞大如 admin 的,甚至连自己的 urls 都有了!
貌似目前还没有推出正式的 django apps repository 吧,倒是有个兄弟公开了自己一个私有的repository:
http://svn.sourceforge.net/svnroot/django-userlibs
虽然数量还不多,不过还是有了一些很有意思的代码了 :)
希望正式的 repository 快快建立起来,希望用 app 组装 project 的日子快快到来吧!
ps:据说 ror 有个 plugin 的东西,不知是什么样的一个机制,希望有了解的朋友也介绍介绍吧. ^_^
2006年9月10日星期日
django apps repository!
订阅:
博文评论 (Atom)
Profile
- 黄毅
- 深圳, 广州, China
- I Love Python !
Recent Posts
Recent Comments
Tags
- 设计模式 (1)
- ajax (3)
- allegra (1)
- cherrypy (1)
- compiler (1)
- continuation (2)
- descriptor (1)
- django (17)
- dotnet (1)
- framework (2)
- functional (1)
- genshi (1)
- gtk (1)
- haskell (1)
- inkscape (1)
- IronPython (2)
- javascript (1)
- libevent (1)
- mako (1)
- metaclass (4)
- mochikit (1)
- network (1)
- newforms (1)
- orm (1)
- others (18)
- paste (1)
- PEAK (1)
- pickle (1)
- ply (1)
- pocoo (1)
- pypy (3)
- python (38)
- python3000 (3)
- rails (2)
- REST (3)
- sqlalchemy (3)
- stackless (3)
- turbogears (1)
- tutorial (1)
- vim (1)
- web (11)
- wsgi (1)
Who"s Reading
Blog Archives
-
▼
2006
(31)
-
▼
九月
(14)
- compatibility of IronPython
- python is obvious !
- 意外收获:get_caller
- PLY: 一个以教学为目的的lex、yacc实现
- laying out an application
- django 的 contribs 之 comments
- Rails/Django comparison synopsis
- Pocoo: 半个框架
- usable stackless
- django 的 contribs 之 contenttype
- django apps repository!
- 使用 python2.5 中增强的 yield 模拟 StacklessPython
- python web 框架可真多!
- 有家的感觉,真好 !
-
▼
九月
(14)
1 评论:
Rails的plugin体系比较自由,得益于Ruby的open class特性,基本可以在plugin干任何事,比如修改核心类,meta programming。plugin一般只干一件小事,不是包括MVC的完整应用。但是有种特殊的plugin是例外:engine。engine是一种拥有特殊接口的重量级plugin,可以提供完整的mvc,一般用于比较大的组件。
Rails的plugin体系采用类似gems的管理机制,安装是很自动化的。Plugin体系早在0.14版本的时候就已经建立,目前大概有一百多个plugin了吧,基本每个Rails项目都会用到3个以上, 熟悉plugin已经成为提高Rails开发效率的必备条件。
发表评论