Django与模型视图控制器

Leo*_*rdo 105 django model-view-controller frameworks

有人可以解释一下Django和模型视图控制器模式之间的差异吗?

从功能上来说,我们可以从这些差异中得到什么 - 例如,将Django与Ruby on Rails进行比较的方式有何不同?

Pao*_*tti 131

根据Django Book,Django非常接近MVC模式,被称为MVC框架.

Django被称为MTV框架,因为控制器由框架本身处理,大多数兴奋发生在模型,模板和视图中.

您可以在此处阅读有关MTV/MVC的更多信息:

MTV(或MVC)开发模式

如果您熟悉其他MVC Web开发框架,例如Ruby on Rails,您可以将Django视图视为控制器,将Django模板视为视图.

这是对MVC的不同解释所带来的不幸混淆.

在Django对MVC的解释中,视图 描述了呈现给用户的数据; 它不一定只是数据的外观,而是呈现的数据.

相比之下,Ruby on Rails和类似的框架表明控制器的工作包括决定向用户呈现哪些数据,而视图严格按照数据的外观,而不是呈现哪些数据.

  • 谢谢你的回答.从Rails到Django,这回答了我发现最令人沮丧的事情之一:为什么django将控制器代码放在一个名为views.py的文件中? (6认同)
  • @dgmda:因为"控制器"的概念在webapps中是用词不当.MVC是一个事件驱动的框架,它不仅适用于HTTP的无状态REQUEST/RESPONSE模型.它首先不应该被称为MVC.几乎所有的webapp都不是MVC,而是使用模型和通常称为View的函数或类.View依次可以将HTML呈现委托给模板,但不需要.所以实际上没有控制器. (5认同)
  • 我支持Lennart Regebro的概念,即HTTP之类的无状态模型不应具有控制器,而Web应用程序的MVC模型只会带来极大的混乱 (2认同)

Pau*_*ite 23

Django FAQ本身就是一个不错的起点:

请记住,"模型视图控制器"只是一种模式,即尝试描述通用体系结构.所以一个更好的问题可能是"Django如何适应模型视图控制器模式?"

  • 这可能是最直接的答案. (3认同)

ini*_*ina 11

当您编写代码而不考虑框架片段的名称时,没有任何可疑的差异,例如RoR.但这取决于你给出的用途models,因为在Django上它们很容易包含一些其他框架将保持在控制器级别的逻辑.

viewDjango上往往是一组用于读取数据的查询,并传递给模板.

  • Django中的`views`类似于MVC中的`controller`,Django中的`template`更像是`views` (9认同)

Sam*_*zzo 7

在mvt中,对URL的请求被分派到View.此视图调用模型,执行操作并为输出准备数据.数据将传递给模板,该模板将作为响应进行渲染.理想情况下,在Web框架中,控制器隐藏在视图之外.

这是与MVC不同的地方:在mvc中,用户与gui交互,控制器处理请求并通知模型,视图查询模型以向用户显示结果.