Django与模型视图控制器
有人可以解释一下Django和Model View Controller模式之间的区别吗?
从function上来说,我们可以从这些差异中得到什么?也就是说,将Django与Ruby on Rails比较起来有什么不同?
根据Django Book ,Django非常接近MVC模式,被称为MVC框架。
Django被称为MTV框架,因为控制器是由框架自己处理的,大部分兴奋发生在模型,模板和视图中。
你可以在这里阅读更多有关MTV / MVC:
MTV(或MVC)发展模式
如果您熟悉其他MVC Web开发框架(例如Ruby on Rails),则可以将Django视图作为控制器 ,将Django模板视为视图 。
这是MVC的不同解释带来的一个不幸的混乱。
在Django对MVC的解释中, 视图描述了呈现给用户的数据; 不一定是数据的外观,而是显示哪些数据。
相比之下,Ruby on Rails和类似的框架表明,控制器的工作包括决定向用户呈现哪些数据,而视图严格地说是数据的外观,而不是显示哪些数据。
Django FAQ本身是一个体面的开始:
- https://docs.djangoproject.com/en/dev/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the -视图-的模板,如何先得你-DON-T-使用最标准名称
请记住,“模型视图控制器”只是一个模式,即试图描述一个共同的架构。 所以更好的问题可能是“Django如何适应模型视图控制器模式?”
在编写代码时,不要考虑框架的名称,例如RoR之间没有任何区别。 但是它取决于你给models
的用途,因为在Django上它们很容易包含一些逻辑,在其他的框架上将会保持在控制器级别。
Django中的view
往往是一组查询获取数据,并将其传递给模板。
在mvt中,对URL的请求被分派给一个View。 该视图调用模型,执行操作并准备输出数据。 数据被传递给一个模板,呈现为一个响应。 理想情况下,在Web框架中,控制器是隐藏的。
这与MVC的区别在于:在mvc中,用户与gui交互,控制器处理请求并通知模型,视图查询模型以向用户显示结果。