xiaoping.tang 兄向我推荐这个论坛程序,说它写得不错。我于是下了代码来研究了一下,发现它确实有点意思。这是个demo。 与其说它是个应用程序,不如说它是半个web框架,想必从中抽取出一个完整的框架也不是什么难事。 模版:jinja(独立后的 django 模版),orm:sqlalchemy,基于WSGI。 而我认为其中最有特色的部分还在 package 的配置管理这一块,它的整个系统都建立在这个机制之上。而这个论坛程序只是这个机制下面一个叫做 core 的 plugin 而已。这一块让我联想起稍微接触过一下的zope3。 它的配置文件的语法就挺有意思,很像 python :
components = list: db.CoreTableObserver captcha.CaptchaImage session.SessionWrapper pages.IndexPage一个 package 只是一个普通的 python 包,不过下面可以放个配置文件描述包中的内容,分这么几类:components、tables、template_tags、 template_filters、middlewares。在初始化时按照配置文件指示加载并初始化这些东西,将所有包的内容分门别类放在一起进行统一管理。pocoo/pkg/core/package.conf 便是 core 的配置文件。 components 范围比较广,只要它是 Component 的子类的子类即可。Component 的直接子类可以看作是实际组件的抽象基类,并不能直接当作组件使用。组件必须继承自这些抽象基类。框架会将组件按照其基类进行分类管理。 我看到在 core 中有这么几个 component 的类型:
- RequestWrapper:将 request 对象交给 RequestHandler 之前交给它们处理一遍先,cache、session等就是以这种方式实现
- RequestHandler:这就是我们熟悉的控制器了,处理请求并返回内容,每一个 RequestHandler 都有一个 handler_regexes 的属性,指定匹配 url 的正则表达式,类似 django ,
- RemoteCallable:处理 web服务 的请求,
- AuthProvider:提供用户验证的组件,
- PostProcessor :对帖子进行处理,
- DatabaseObserver:在创建数据表的前后进行一些处理,
0 评论:
发表评论