5

这个问题已经折磨了我一段时间了。我已经阅读了有关此主题的内容,但似乎没有什么可以清除我的想法。我知道他们调用视图模板和模型模型,但我并没有真正了解控制器在哪里。django 所称的视图在我看来更像是控制器的动作/方法/功能,而不是控制器本身,但是在我阅读的任何地方,我发现假定的视图控制器等效。

我之前使用过 MVC 框架(ASP.NET MVC3、Ruby on Rails、PHP Laravel 框架),它们都将控制器定义为相同的东西:一堆与网站特定主题相关的函数,即用户帐户或类似的东西。我在此描述和 django 功能之间找到的最佳等价物是应用程序,但我当然错了,因为大量的人员和文档走在了另一个方向。

有人可以帮我吗?我的心态有意义吗?我是否在这里遗漏了一些重要的东西,然后我无法正确理解这些概念?

4

7 回答 7

6

将像 MVC 这样的设计模式视为牢不可破的规则是错误的。它们确实不是:有各种各样的实现方式,或多或少符合描述。

在 Python 中尤其如此,其中的指导原则之一是“实用性胜过纯洁性”——换句话说,做有效的事。

在任何情况下,Django 都没有声称自己是 MVC 框架。相反,文档将其描述为MTV:模型、模板、视图。毕竟,在设计模式的世界之外,每个人都将“具有变量和流控制语法的 HTML 文件”称为模板,而不是视图。

(该常见问题解答条目还为您的问题提供了可能的答案:控制器本身就是框架。但它继续强调试图硬塞进这些定义是错误的。)

于 2013-09-09T07:36:39.853 回答
5

定义了您的应用的views.py视图功能,并且您的应用将相关功能组合在一起。

但是,我相信您在这里缺少的是urls.py. urls 文件是控制器的第一部分。

内部的 URL 模式urls.py规定了您可以传递给视图函数或视图类的内容(取决于您采用的方法,使用基于函数的视图或基于类的视图),然后将其路由到正确的视图函数。

所以在views.py和之间存在紧密的耦合urls.py,这构成了 MVC 的整个 Controller 部分。

将其与 Rails 进行比较,会发现它urls.py是 a routes.rb,而实际的控制器类是views.py函数/cbv。

于 2013-09-09T05:26:01.937 回答
2

术语的不匹配是不幸的,但或多或​​少是在做同样的事情。

于 2015-03-15T18:02:58.483 回答
1

有人可以帮我吗?我的心态有意义吗?我是否在这里遗漏了一些重要的东西,然后我无法正确理解这些概念?

MVC 中几乎每个人都达成某种共识的唯一定义明确的部分是 M;V 和 C 在不同的 Web 框架中意味着完全不同的东西,以至于 MVC 框架实际上只意味着没有将所有代码放在一个意大利面条中(典型的经典 PHP 代码)。您只需要接受 MVC 并不是一个定义明确的术语。

于 2013-09-09T05:33:44.543 回答
1

您可以阅读Django 常见问题解答。它解释了如何在 django 中实现 MVC。关于控制器 Django 有一个答案:。

那么,“控制器”在哪里?在 Django 的例子中,它可能是框架本身:根据 Django URL 配置向适当视图发送请求的机器。

于 2013-09-09T07:44:24.027 回答
1

Django 不是严格意义上的 MVC。

我发现这个讨论很有启发性: Django is not MVC

于 2013-12-04T18:37:51.197 回答
1

真的伙计们:

DJANGO 是 MVC!但是View用于控制器的词。

而 Django 是 Full MVC,但是

模型 - 模型视图 - 模板控制器 - 视图

于 2014-03-15T13:20:45.257 回答