你如何管理你的Django应用程序?

时间:2008-12-21 10:48:19

标签: python django project structure

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

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

我不知道该怎么做。也许是因为我对Django知之甚少,但我也很感兴趣......

5 个答案:

答案 0 :(得分:6)

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

Generic foreign keys可以帮助您解耦可能应用于其他几个应用程序的模型的应用程序,例如标记或注释。

答案 1 :(得分:5)

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

答案 2 :(得分:3)

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

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

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

如果有疑问,暂时忘记可重用的应用程序。将您的所有消息和民意调查放在一个应用程序中并通过一次转换。在这个过程中你会发现哪些步骤是不必要的,并且可以在将来作为独立的东西进行分解。

答案 3 :(得分:3)

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

您可以采取的一些方法是:

  • 为每个应用程序提供自己的urls.py
  • 允许将模型类型作为参数传递,而不是明确声明视图中使用的模型。通用视图使用此原则。
  • 通过在urls.py
  • 中传递某种template_name参数,轻松覆盖模板
  • 确保您可以使用对象和视图执行反向网址查找。这意味着在urls.py中命名您的视图并在模型上创建get_absolute_url方法。
  • 在某些情况下,例如标记,可以使用GenericForeignKeys将应用中的模型与任何其他模型相关联,无论它是否有“回顾”它的外国人。

答案 4 :(得分:0)

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

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