2008-12-21 120 views
7

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

让我们以一种SO为例。你会使用哪些应用程序? 我想说应该有应用程序“用户”和“问题”。但是如果有静态文章的话题系统呢。也许他们也可以收到选票。 那么如何构建应用程序结构呢?一个应用程序的“问题”,“投票”和“主题”或只是一个应用程序“内容”?

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

回答

0

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

尽管知道网站应该是什么是基本的。 ;)

+0

但是,在哪一个功能与另一个功能之间画线? – okoman 2008-12-21 12:13:15

5

您应该尝试尽可能多的应用程序分离项目。对于大多数项目,应用程序不会包含超过5个模型。例如,像SO这样的项目将为UsersProfiles,Questions,Tags(django中有一个为此准备就绪的应用程序)等单独的应用程序。如果有一个静态页面的系统也将是一个单独的应用程序(有准备好的以此目的)。您还应该尝试尽可能使您的应用程序尽可能通用,以便您可以在其他项目中重用它们。在可重复使用的应用上有很好的presentation

+3

+1:小而可重用 - 专注于一个或几个密切相关的实体。 – 2008-12-22 02:48:27

3

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

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

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

如果有疑问,现在就忘记可重复使用的应用程序。把所有的消息和民意调查放在一个应用程序中,并通过一次修改。在这个过程中,你会发现哪些步骤是不必要的,并且可以在未来独立出来。

6

有没有硬性规定,但我认为最好是在更专业的应用程序方面犯错。理想情况下,应用程序只应处理一项功能问题:即“标记”或“评论”或“授权/验证”或“帖子”。这种类型的设计还将帮助您重复使用可用的开源应用程序,而不是重新发明轮子(即Django自带authcomments应用程序,django-taggingdjango-taggable几乎可以确实满足您的需求等)。

Generic foreign keys可以帮助您将可能应用于其他应用程序模型的应用程序(如标记或注释)分开。

3

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

一些你可以做到这一点的方法是:

  • 给予每个应用程序自身的urls.py
  • 允许模型类型将作为参数传递,而不是明确地宣布哪些车型在使用你的观点。通用视图使用这个原则。
  • 通过在您的urls.py中传递某种template_name参数,轻松覆盖您的模板
  • 请确保您可以使用对象和视图执行反向URL查找。这意味着在urls.py中命名您的视图并在您的模型上创建get_absolute_url方法。
  • 在某些情况下,如标记,可以使用GenericForeignKeys将应用程序中的模型与任何其他模型相关联,而不管它是否有ForeignKeys“回顾”它。
相关问题