Pyramid中PHP框架的MVC等效物是什么?
在像Kohana这样的PHP框架中,模型-视图-控制器(MVC)模式是怎么在Pyramid和Python中对应的呢?
In Pyramid "Model" is .... and it is used for .....
In Pyramid "View" is .... and it is used for .....
In Pyramid "Controller" is .... and it is used for .....
我想搞清楚Pyramid的逻辑。如果能提供一些帮助、文档之类的,那就太好了。
谢谢。
4 个回答
来自Pyramid介绍:
你说Pyramid是MVC框架,但控制器在哪里呢?
Pyramid的作者认为MVC这种模式其实不太适合网络应用。在Pyramid应用中,有一个资源树,代表了网站的结构,还有视图,用来展示存储在资源树中的数据和用户定义的“领域模型”。不过,这个框架并没有提供什么东西可以直接对应“控制器”或“模型”的概念。所以如果非要给它起个缩写,我想可以说Pyramid其实是一个“RV”框架,而不是“MVC”框架。不过,“MVC”这个说法在和其他网络框架比较时,还是能算作一个大致的分类名称。
如果你想的话,使用Pyramid框架可以模拟MVC模式:
- 模型(Model):比如可以用sqlalchemy这个工具(http://docs.sqlalchemy.org)来处理数据。
- 视图(View):使用模板和视图方法来展示内容。
- 控制器(Controller):你可以用pyramid_handlers这个包来创建控制器,并把路由中定义的动作映射到控制器中的具体操作,比如:
Class HomeController(object): def __init__(self, request): self.request = request def form_proc(self): name = self.request.params['name'] ... bla, bla, bla ...
在配置文件中,你可以添加类似这样的内容:
config.add_handler('home', '/home/{action}', handler='mypackage.HomeController')
如果你在表单的动作(action)里放入这个网址 -> http://SERVER_NAME/home/form_proc,那么你就可以处理这个表单了。
Pyramid给你提供了很多灵活性,如果你需要的话。
Pylons是两个框架之一,和repoze.bfg合并成了Pyramid。它的设计和MVC系统有点像。
我把“像”放在引号里,是因为这几年很多人对MVC的定义争论不休……很多曾经自称是“MVC”的项目,现在开始称自己为“MTC”(模型模板控制器)、“MT”(模型模板)或者“MV”(模型视图)。大家都知道“模型”是什么,但“视图”和“控制器”在不同框架中具体指的是什么,常常会引起争议。
Pyramid和Pylons都有一个“调度器”功能,用来处理请求的映射。在Pylons中,这个功能在config/routes.py文件里;而在Pyramid中稍微有点不同——默认的结构里,路由设置在app/init.py文件中,但你可以选择把它放到app/routes.py里,或者使用config.include()把它放到你的“处理器”里,或者用config.scan()从你的“视图”中提取。
Pyramid中的“处理器”是由pyramid_handlers提供的,实际上就是一些带有自动生成功能的“视图”。如果你愿意,你的应用可以同时使用处理器和视图(我就是这样做的)。
总之,根据你对MVC、MTC等的理解,这里有一个大致的对照表,供你参考:
|| mvt | mvc | mvc
==========================================================================
model || sqlalchemy | sqlalchemy | sqlalchemy
view || views/handlers | templates | views/handlers + templates
controller || | views/handlers | dispatch/routing
template || templates | |
顺便说一句,我上面定义的内容并不是基于我个人的理解或“官方”的MVC定义……而是根据其他流行框架的市场宣传来看的。