Django 与模型视图控制器

有人能解释一下 Django 和模型视图控制器模式之间的区别吗?

从功能上来说,我们可以从这些差异中期待什么ーー例如,比较 Django 和 Ruby on Rails 的工作原理有什么不同?

74848 次浏览

《姜戈常见问题解答》本身就是一个不错的起点:

在我们对 MVC 的解释中,“视图”描述了呈现给用户的数据。不一定是数据看起来如何,而是呈现哪些数据。该视图描述您所看到的数据,而不是您如何看到它。这是一个微妙的区别。

...

此外,明智的做法是将内容与表示分开——这就是模板的用武之地。在 Django 中,“视图”描述显示哪些数据,但是视图通常委托给一个模板,该模板描述如何显示数据。

Where does the “controller” fit in, then? In Django’s case, it’s probably the framework itself: the machinery that sends a request to the appropriate view, according to the Django URL configuration.

如果您非常想知道缩略词,您可能会说 Django 是一个“ MTV”框架-即“模型”、“模板”和“视图”这种崩溃更有道理。

请记住,“模型视图控制器”只是一种模式,也就是说,一种描述通用体系结构的尝试。因此,一个更好的问题可能是“ Django 适合模型视图控制器模式吗?”

在 mvt 中,对 URL 的请求被分派到 View。此视图调用模型,执行操作并准备输出数据。数据被传递给一个将发出的数据作为响应呈现的 Template。理想情况下,在 Web 框架中,控制器是隐藏在视图之外的。

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

根据 Django Book,Django 遵循的 MVC 模式足以被称为 MVC 框架。

Django 之所以被称为 MTV 框架,是因为控制器是由框架本身来处理的,而且大多数令人兴奋的事情都发生在模型、模板和视图中。

你可以在这里了解更多关于 MTV/MVC 的信息:

MTV (或 MVC)开发模式

如果你对其他车祸事故很熟悉的话 Web-development frameworks, such as Ruby on Rails, you may consider Django 意见是 控制器和 Django 模板为 观点

这是个不幸的误会 由不同的 interpretations of MVC.

在 Django 对 MVC 的解释中,< em > 视图 描述所呈现的数据 对于用户来说,这不一定是公正的 数据看起来如何,但哪些数据是 提交。

相比之下,Ruby on Rails 和类似的框架表明 the controller’s job includes deciding 将哪些数据呈现给用户, 而严格的观点是怎样的呢 数据的外观,而不是哪些数据是 提交。

在编写代码时,不要考虑框架块的名称,这两者之间没有实质性的差异,例如 RoR。但这取决于使用 models,因为在 Django 上,它们很容易包含一些逻辑,而在其他框架上,这些逻辑将停留在控制器级别。

Django 上的 view往往是一组用于获取数据的查询,并将它们传递给模板。