【问题标题】:MVC pattern in djangodjango 中的 MVC 模式
【发布时间】:2013-09-09 03:50:03
【问题描述】:

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

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

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

【问题讨论】:

  • 您列出的所有框架都没有真正实现 MVC 或 MVC 启发的模式。相反,他们都实施了 PAC。

标签: django model-view-controller


【解决方案1】:

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

在 Python 中尤其如此,其中guiding principles 之一是“实用胜过纯度”——换句话说,做有效的事。

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

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

【讨论】:

    【解决方案2】:

    views.py 定义了您的应用的视图函数以及您的应用组相关函数。

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

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

    所以views.pyurls.py 之间存在紧密耦合,这构成了MVC 的整个控制器部分。

    与 Rails 相比,urls.pyroutes.rb,而实际的控制器类是 views.py 函数/cbv。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 而不是“views”,django 家伙应该使用另一个名称以免与 mvc 混淆
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          Django 不是严格意义上的 MVC。

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

          【讨论】:

            【解决方案7】:

            真正的家伙:

            DJANGO 是 MVC! 但是 View 这个词用于 Controller。

            而 Django 是 Full MVC,但是

            型号 - 型号 查看 - 模板 控制器 - 查看

            【讨论】:

              猜你喜欢
              • 2010-11-20
              • 2010-12-04
              • 1970-01-01
              • 2011-02-02
              • 1970-01-01
              • 2012-01-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多