Django和MVC(MVT)layou

2024-03-29 10:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

Im来自于使用其他基于MVC的框架,而进入Django,对于Im过去的做法似乎有点尴尬。例如,在其他基于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

这将在数据库中创建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和来自那个worls的各种框架(cakephp,yii,主要是),如果这有什么不同的话。这将是我在python/django中的第一个主项目。我只想把事情做好。


Tags: andthetoinpy框架modelmodels
2条回答

Is there any benefit to this type of layout over a traditional mvc layout described in the first example?

是的。

你所说的“传统MVC”只是另一个框架。这不是神奇的更好或更正确。只是不同而已。

Is there another preferred layout beyond this?

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

i just want to get it right.

那就这样做。

  1. 抛弃你做过的其他事情留下的成见。

  2. 像一个完全的初学者一样,用Django重新开始。

  3. 在你学习了第六个框架之后,你就可以(而且只有在那时)比较和对比你所学的六个框架。在你学会六个之前,每一个都必须被视为新的、完整的、不同的和独特的。

不要比较和对比。

就把Django当成Django,用Django的方式做事。

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


注释

根不代表什么

  • 配置——不存在。

  • 控制器——不存在。

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

  • 视图——一个Python模块,它具有响应请求和创建响应的视图函数。

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

  • 插件——不存在。

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

  • 公共html——不存在。

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

  • index.html——不存在。

你漏掉的东西

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

  • admin——默认管理站点的管理绑定。依赖于模块和表单。

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

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

  • 设置—具有默认数据库配置、中间件等的模块。

最大的好处是应用程序是模块化的。您可以通过删除一个目录来删除投票应用程序,而不是通过几个目录来删除每个条目。另一方面,如果你在某个地方找到了一个你想使用的投票应用程序,你可以直接放在一个文件夹里,你就可以走了。

如果你认为一个网站是由几个单独的、主要是不同的“应用程序”和一些胶水组合而成的,那么这个组织就更有意义了。

相关问题 更多 >