Django和MVC(MVT)布局

时间:2011-07-25 21:24:02

标签: python django model-view-controller

我来自使用其他基于MVC的框架,并进入Django,它似乎有点尴尬我以前。例如,在其他基于MVC的框架中。我的布局可能是这样的:

root:
- config (houses the config files (like settings), url.conf, db connections, etc.)
- controllers (houses the main logic of each section of the site. The middle ground between views and models)
- models (handles all the data to be validated and anything that interacts with the database. declares the DB structure. each model a class, each attribute a db field. in django, a template?)
- views (the html displayed to the end user, put together by the controllers)
- tests (all the tests)
- plugins (3rd party apps you install into yours.)
- uploads (user uploaded files)
- public_html (the actual public facing files)
-\ css|js|img (the various static file types for page manipulation)
-\ index.html

这就是我以前所使用的,似乎django做的事情非常不同。以前,如果我有一个民意调查应用程序,我会:

controllers/PollController.py
models/Poll.py
views/poll/index.py

这会在db中创建poll表。但在Django,我该怎么做?这是一个可接受的布局吗?从我所读到的,上面将更像是这样:

root:
- project (this would be the main app, and what glues everything together)
--/ settings.py
--/ urls.py
--/ templates/

- apps
-/ Poll
--/ models.py (i would have no Poll.py model, so it would all go in here)
--/ urls.py (any url.conf specific to this model would go in here)
--/ templates/ (the various views for this app)
虽然这在某些方面确实有意义,但它对我来说感觉很陌生。与第一个示例中描述的传统mvc布局相比,这种布局有什么好处吗?除此之外还有另一种首选布局吗?这个“项目”的目的是核心将是我自己使用的基本框架,我将为每个使用此框架创建一些不同的“应用程序”。在旧版本中,每个应用程序只会通过成为该目录中的插件来扩展主要应用程序。

作为背景说明,我的大多数经验都是在php和各种框架(大多数是cakephp,yii),如果这有所不同。这将是我在python / django中的第一个主要项目。我只是想把它弄好。

2 个答案:

答案 0 :(得分:7)

最大的好处是应用程序是模块化的。您可以删除一个目录而不是通过删除每个目录的多个目录来删除您的民意调查申请。另一方面,如果你在某个地方找到了你想要使用的民意调查应用程序,你可以直接放入一个文件夹,然后就可以了。

如果你认为一个网站是一个由几个单独的,大多数不同的“应用程序”聚集在一起的想法,并用一些粘合剂将它们组合在一起,那么这个组织就更有意义了。

答案 1 :(得分:6)

  

与第一个示例中描述的传统mvc布局相比,这种布局有什么好处吗?

你似乎称之为“传统MVC”只是另一个框架。这不是神奇地更好或更正确。它只是不同。

  

除此之外还有另一种首选布局吗?

可能有数百种方法可以做到这一点。 Django选择了一个非常适合Python和Web应用程序。

  

我只是想把它弄好。

然后这样做。

  1. 放弃你已经完成的其他事情遗留下来的先入之见。

  2. 像Django一样开始新鲜和空洞,就像一个完整的初学者。

  3. 在您学习了第6个框架之后,您可以(并且只有这样)比较和对比您学到的六个框架。在你学会了六个之前,每一个都必须被视为新的,完整的,不同的和独特的。

  4. 不要比较和对比。

    将Django当作Django并以Django的方式做事。

    (有关更多隐喻性的建议,请阅读Django Reinhardt的音乐;他有独特的视角和独特的吉他方法。)


    注释

    root#并不意味着什么

    • config - 不存在。

    • 控制器 - 不存在。

    • models - 具有持久对象的类定义的Python模块。映射到RDBMS架构。可以进行特定于模型的测试。

    • views - 一个带有视图函数的Python模块,可响应请求并创建响应。

    • test - 具有特定于视图和特定于模板的测试的Python模块。

    • 插件 - 不存在。

    • 上传 - 运行时,而不是应用程序的开发。

    • public_html - 不存在。

    • css | js | img - 静态“媒体”文件。运行时,而不是开发。

    • index.html - 不存在。

    你遗漏了什么

    • 模板 - 您的HTML模板页面,由视图函数使用。

    • admin - 默认管理站点的管理员绑定。依赖于模块和表格。

    • 表格 - 表格定义;这些是生成用于输入验证的表单的类。

    • urls - 从URL路径到视图函数的映射。

    • 设置 - 具有默认数据库配置,中间件等的模块