7

我只是想尝试用 django 构建一个项目。因此,我有一个关于如何管理这样一个项目的(基本)问题。因为我找不到任何关于如何将项目拆分为应用程序的指南。

我们以一种 SO 为例。您会使用哪些应用程序?我想说应该有应用程序“用户”和“问题”。但是,如果也有一个包含静态文章的主题系统呢。也许他们也可以获得选票。那么如何构建应用程序结构呢?一款用于“问题”、“投票”和“主题”的应用,还是一款用于“内容”的应用?

我不知道该怎么做。也许是因为我对 Django 还不太了解,但我也很感兴趣......

4

5 回答 5

6

没有一成不变的规则,但我会说最好在更专业的应用程序方面犯错。理想情况下,应用程序应该只处理一个功能问题:即“标记”或“评论”或“auth/auth”或“帖子”。这种类型的设计还将帮助您重用可用的开源应用程序,而不是重新发明轮子(即 Django 带有authcomments应用程序,django-taggingdjango-taggable几乎肯定可以满足您的需要,等等)。

通用外键可以帮助您将可能应用于模型的标记或评论等应用程序与其他几个应用程序分离。

于 2008-12-21T14:08:05.897 回答
5

您应该尝试将项目分离到尽可能多的应用程序中。对于大多数项目,一个应用程序包含的模型不超过 5 个。例如,像 SO 这样的项目将有单独的用户配置文件、问题、标签应用程序(django 中有一个现成的应用程序)等。如果有一个带有静态页面的系统也将是一个单独的应用程序(有现成的应用程序)以此目的)。您还应该尝试使您的应用程序尽可能通用,以便您可以在其他项目中重用它们。关于可重用应用程序有一个很好的演示

于 2008-12-21T12:56:59.613 回答
3

就像任何一组依赖项一样...尝试找到项目中最有用的独立方面并制作那些独立的应用程序。其他 Django 应用程序将具有更高级别的功能,并重用您已设置的最低级别应用程序的部分。

在我的项目中,我有一个日历应用程序,其模型中有自己的 Event 对象。我还设置了一个拼车数据库,对于出发时间和持续时间,我在 RideShare 表中使用日历的 Event 对象。拼车数据库可识别日历,并“免费”从日历应用程序中获取所有漂亮的 .ics 导出和日历视图。

有一些技巧可以让应用程序可重用,例如命名模板目录:project/app2/templates/app2/index.html。这使您可以从任何其他应用程序中引用 app2/index.html,并获得正确的模板。我选择了一个查看 Django 本身内置的可重用应用程序。Pinax 在大小方面有点像怪物,但它也展示了一个很好的可重用应用程序结构。

如果有疑问,请暂时忘记可重复使用的应用程序。将您所有的消息和民意调查放在一个应用程序中,并通过一个 rev。在此过程中,您会发现哪些步骤是不必要的,并且将来可能会被分解为独立的东西。

于 2008-12-21T14:03:39.290 回答
3

在决定是否编写应用程序时要问自己一个好问题是“我可以在另一个项目中使用它吗?”。如果您认为可以,请考虑如何使应用程序尽可能独立;如何减少依赖关系,使应用程序不依赖于特定项目的任何特定内容。

您可以这样做的一些方法是:

  • 为每个应用程序提供自己的 urls.py
  • 允许模型类型作为参数传入,而不是显式声明视图中使用的模型。通用视图使用此原则。
  • 通过在 urls.py 中传递某种 template_name 参数,轻松覆盖模板
  • 确保您可以对您的对象和视图进行反向 url 查找。这意味着在 urls.py 中命名您的视图并在您的模型上创建 get_absolute_url 方法。
  • 在某些情况下,例如标记,GenericForeignKeys 可用于将您应用程序中的模型与任何其他模型相关联,无论它是否具有“回看”它的 ForeignKeys。
于 2008-12-23T02:34:09.417 回答
0

我会告诉你我是如何处理这样的问题的:我通常坐在一张纸上,画出方框(功能)和箭头(功能之间的相互依赖关系)。我确信有一些方法或其他东西可以帮助你,但我的方法通常对我有用(当然是 YMMV)。

不过,了解网站应该是什么是基本的。;)

于 2008-12-21T12:07:27.107 回答