有人能解释一下Django与模型视图控制器模式之间的区别吗?
从功能上讲,我们可以从这些差异中得到什么 - 例如,将Django与Ruby on Rails进行比较的方式有何不同?
答案 0 :(得分:120)
根据Django Book,Django非常接近MVC模式,被称为MVC框架。
Django被称为MTV框架,因为控制器由框架本身处理,大部分兴奋都发生在模型,模板和视图中。
您可以在此处阅读有关MTV / MVC的更多信息:
The MTV (or MVC) Development Pattern
如果您熟悉其他MVC Web开发框架,例如 Ruby on Rails,你可以考虑Django 视图是控制器和 Django模板是视图。
这是一个令人遗憾的混乱 由不同的人带来 对MVC的解释。
在Django对MVC的解释中,视图 描述了呈现的数据 给用户;它不一定只是 数据的外观,但是数据是什么 呈现。
相比之下,Ruby on Rails 和类似的框架表明 控制器的工作包括决定 哪些数据呈现给用户, 而观点严格如何 数据看起来,而不是哪些数据 呈现。
答案 1 :(得分:19)
Django常见问题解答本身就是一个不错的起点:
请记住,“模型视图控制器”只是一种模式,即尝试描述通用架构。所以一个更好的问题可能是“Django如何适应模型视图控制器模式?”
答案 2 :(得分:10)
当你编码时,不考虑框架部分的名称,就没有任何可疑的差异,例如RoR。但这取决于你给出models
的用途,因为在Django上它们很容易包含一些其他框架将保持在控制器级别的逻辑。
Django上的view
往往是一组用于获取数据的查询,并将它们传递给模板。
答案 3 :(得分:6)
在mvt中,对URL的请求被分派到View。此View调用模型,执行操作并为输出准备数据。数据将传递给模板,该模板将作为响应进行渲染。理想情况下,在Web框架中,控制器是隐藏的。
这与MVC不同之处在于:在mvc中,用户与gui交互,控制器处理请求并通知模型,视图查询模型以向用户显示结果。