2013-10-19 52 views
3

我目前正在开发一个django项目。我在django中并不是全新的东西,但是在确定如何组织一些文件的最“方法”方面遇到一些困难。Django,项目结构

我有一些计算东西的类,可以从manage.py的cli和webservice应用程序中使用。这些计算使用我的核心应用程序中的模型并调用数据库。

我面对的问题是我无法确定放置这些源文件的位置。

我不想把它们放在'lib'文件夹中。我认为这个文件夹中的模块将是django独立模块。

目前,该模块是在我的应用程序的模型。但由于它没有定义任何新的结构,我不认为它是最干净的方式。

任何意识到有一个干净的结构,尊重'Django的生活方式'?

感谢

回答

1

如果模块独立于Django的,那么它应该是一个独立的Python包,完成一个setup.py安装它。 Django模型和使用它的webservices可以像任何其他外部依赖项一样导入。

如果模块依赖于你的Django应用程序,那么它应该在应用程序的目录中。如果它没有定义新的模型,那么它不应该在models.py

这是回答您的问题吗?

+0

它或多或少地回答它。这个模块是应用程序的一部分',使用django模型机制,但不是django web元素(视图,模板,...) –

+0

如果它使用应用程序的模型,那么我认为它在应用程序的目录中很好。不在'models.py'中,而是在另一个文件中,因为它没有定义模型,就像你说的那样。 – janos

5

问题是,这样做的最“djangonic”的方式是不都具有“核心应用程序”。您应该努力将功能分成单独的应用程序。我完全知道这并不总是微不足道的。

但假设您正在为一所学校设计一个Intranet网站。您将有一个应用程序处理学生的帐户,另一个应用程序生成时间表,另一个应用程序生成时间表,另一个应用程序生成内部留言板等。每个应用程序定义自己的模型(没有“项目级模型”),但应用程序可以导入每个其他模型(所以留言板帖子可以有一个ForeignKey字段指向学生的“学生”应用程序)。没有必要为“主”或“核心”应用程序(参见:James Bennett's "writing reusable Django applications" presentation从DjangoCon)

然后,您可以把您的管理命令在management/commands目录中的应用程序,命令处理的。例如,如果一个命令从数据库中删除旧学生,它将进入students应用程序内的management/commands

+0

是的,我是新的。我刚刚说'核心'应用程序,因为我不想提供有关该项目的不相关细节。但是,感谢您的链接:) –