django中的MVC模式

eca*_*ver 5 django model-view-controller

这个问题已经折磨了我一段时间了.我已经读过这个话题,但似乎没有什么能清楚我的想法.我知道他们称视图模板和模型模型,我真正得到的不是控制器所在的位置.django称之为视图的东西在我看来更像是控制器的动作/方法/功能而不是控制器本身,但在我读到的任何地方,我发现假定的视图控制器等效.

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

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

Dan*_*man 6

将MVC这样的设计模式视为牢不可破的规则是错误的.它们实际上并非如此:有各种各样的方法来实现它们,或多或少地符合描述.

在Python中尤其如此,其中一个指导原则是"实用性超越纯度" - 换句话说,做有效的方法.

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

(该FAQ条目还为您的问题提供了一个可能的答案:控制器本身就是框架.但它继续强调,尝试将这些定义用于制定这些定义是错误的.)


Hen*_*son 5

views.py为您的应用程序定义视图功能,您的应用程序组相关的功能整合在一起.

但是,我相信你在这里失踪的是urls.py.urls文件是控制器的第一部分.

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

因此,它views.py与之间存在紧密的耦合urls.py,这弥补了MVC的整个控制器部分.

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