有人可以解释一下Django和Model View Controller模式之间的区别吗?
从功能上讲,我们可以从这些差异中得到什么?例如,将Django与Ruby on Rails进行比较,有什么不同?
有人可以解释一下Django和Model View Controller模式之间的区别吗?
从功能上讲,我们可以从这些差异中得到什么?例如,将Django与Ruby on Rails进行比较,有什么不同?
Answers:
根据Django书,Django遵循MVC模式的程度非常接近,可以称为MVC框架。
Django之所以称为MTV框架,是因为控制器由框架本身处理,并且大多数兴奋都发生在模型,模板和视图中。
您可以在此处阅读有关MTV / MVC的更多信息:
如果您熟悉其他MVC Web开发框架(例如Ruby on Rails),则可以将Django视图作为控制器,而将Django模板视为视图。
不幸的是,由于对MVC的不同解释而引起的混乱。
在Django对MVC的解释中,视图 描述了呈现给用户的数据。它不一定只是数据的外观,而是呈现的数据。
相反,Ruby on Rails和类似的框架建议控制器的工作包括确定将哪些数据呈现给用户,而视图严格来说是数据的外观,而不是呈现的数据。
Django FAQ本身是一个不错的起点:
在我们对MVC的解释中,“视图”描述了呈现给用户的数据。不一定是数据的外观,而是要呈现的数据。该视图描述的是您看到的数据,而不是如何查看。这是一个微妙的区别。
...
此外,将内容与表示分开是明智的,这就是模板的来源。在Django中,“视图”描述了要显示的数据,但是视图通常委托给模板,后者描述了如何显示数据。
那么,“控制器”适合放在哪里?在Django的情况下,可能是框架本身:根据Django URL配置将请求发送到适当视图的机器。
如果您渴望首字母缩略词,则可以说Django是一个“ MTV”框架-即“模型”,“模板”和“视图”。这种故障更有意义。
请记住,“模型视图控制器”仅是一种模式,即尝试描述通用架构。因此,一个更好的问题可能是“ Django如何适合Model View Controller模式?”
在mvt中,对URL的请求将分派给View。该视图调用模型,执行操作并准备数据以供输出。数据将传递到一个模板,该模板将作为响应发出。理想情况下,在Web框架中,控制器是隐藏起来的。
这与MVC的区别在于:在mvc中,用户与gui交互,控制器处理请求并通知模型,视图则查询模型以将结果显示给用户。