【问题标题】:Views VS App in Django?在 Django 中查看 VS 应用程序?
【发布时间】:2014-12-20 16:25:51
【问题描述】:

对不起这个愚蠢的问题,但我很困惑:

我读过This

Intermezzo:项目与应用程序

您可能想知道为什么在 Django 1.4 中,startproject 命令与预先存在的 startapp 命令一起添加。答案在于 Django“项目”和 Django“应用程序”之间的区别。简而言之,一个项目是一个完整的网站或应用程序。 “应用程序”是一个小的、(希望是)自包含的 Django 应用程序,可以在任何 Django 项目中使用。如果您正在构建一个名为“Super Blogger”的博客应用程序,那么“Super Blogger”就是您的 Django 项目。如果“超级博客”支持读者投票,“投票”将是“超级博客”使用的 Django 应用程序。这个想法是,您的投票应用程序应该可以在任何需要投票的 Django 项目中重用,而不仅仅是在“超级博客”中。项目是应用程序的集合,以及项目特定的逻辑。一个应用可以在多个项目中使用。

虽然您的自然倾向可能是在“投票”应用中包含大量“超级博客”特定代码和信息,但避免这样做有很多好处。基于松耦合原则,将您的应用程序编写为独立实体可防止项目中的设计决策和错误直接影响您的应用程序。这也意味着,如果您愿意,您可以将任何应用的开发工作交给其他开发人员,而无需他们访问或更改您的主项目。

就像软件开发中的许多事情一样,前期需要付出一些努力,但以后会获得巨大的回报。

那么,如果网站包含:上传、登录、注册、添加帖子

如果我遵循应用程序理念(而不是为每个控制器/视图使用文件),我是否会将它们拆分为项目?代码是否还有其他复杂性?

既然 Django 创建了 __init__ 文件以便更轻松地导入 class,那么将其与其他 startapp 复杂化的主要想法是什么?在我在网上找到的教程中,他们都制作了一次startapp,即使是最完整的应用程序。

【问题讨论】:

  • 我不明白你的问题。无论您是否将它们拆分为单独的应用程序,您肯定不会为每个视图创建一个文件。
  • 请说明您需要哪些模型,我很乐意为您按照引用的源代码设计架构。您在那里引用的建议似乎是个好建议。
  • 可能在这里得到回答:Django 项目与应用程序 [1]:stackoverflow.com/questions/4879036/…
  • 问题在于在自己的项目中采用每个视图,因为这是我所理解的?
  • 但这并不是引用的文字所说的模糊。一个项目是一个完整的网站;应用程序是单个功能区域。这些都不是由单一视图组成的。

标签: python django model-view-controller


【解决方案1】:

项目由应用组成。您可以拥有一个应用程序来管理用户(登录、注册等)。另一个用于管理博客等的应用程序。

所有功能都应该是独立的,尽可能保持独立。这样您就可以更改登录的功能,而不会导致您的博客系统崩溃。每个独立的功能都应该是一个应用程序(用户、投票、博客、cmets 等)。

可能很难将它们完全隔离,这就是为什么您使用为特定目的而设计并且可以轻松插入到您的项目中的外部应用程序的原因。除非绝对必要(许可证、额外功能等),否则不要自己做你可以用一个好的应用做的事情。

每个应用程序使用一个文件作为 url,另一个文件用于视图,另一个文件用于模型。您的用户views.py 可以包含处理您需要的所有视图,您的models.py 包含您的用户需要的所有模型,您的urls.py 将所有内容联系在一起。这是一个应用程序应该如何工作的示例。每个视图/控制器不需要 1 个文件,每个应用程序需要 3-5 个文件,但这些文件是保持模块化和结构化设计所必需的。

【讨论】:

  • 那么为什么不在同一个文件中使用classes?既然是class,那么下次可以在另一个项目中导入,不是吗?
  • 您使用的一切都是类...视图(这些实际上也可以是函数,但我更喜欢基于类的视图)、模型、测试等。您只需将类似的类与单个文件分组。如果您还没有完成django tutorial...这样做...它将帮助您理解此类概念。
  • 是的,但问题是我看到的所有 django 教程都只创建了一次应用程序,然后将所有内容都放在那里!直到现在,我还没有看到有人不止一次制作startapp
  • 如果你想制作可以在另一个项目中导入的东西,你需要确保它与你没有导出的代码完全隔离。您可以阅读django documentation,其中解释了这方面的基础知识。
  • 但是一个普通的网站,比如:注册/登录/添加评论不需要这么多的开销?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多