我准备用Django构建一个相当复杂的“产品”。在这里我将避免使用术语“项目”和“应用程序”,因为我不清楚它们在Django中的具体含义。

项目可以有很多应用程序。应用程序可以在许多项目之间共享。很好。

我不是在重塑博客或论坛——我没有看到我的产品的任何部分在任何情况下都是可重复使用的。直观地说,我将其称为“应用程序”。那么我是否将所有工作都放在一个“app”文件夹中?

如果是这样的话……在Django的项目方面。应用命名空间,我倾向于使用我的产品。我的产品,但这当然是不允许的(但我正在构建的应用程序是我的项目,而我的项目是一个应用程序!)因此,我相信也许我应该通过为每个“重要”模型构建一个应用程序来接近Django,但我不知道在我的模式中如何划分边界来将其划分为应用程序——我有很多具有相对复杂关系的模型。

我希望有一个共同的解决方案…


当前回答

试着回答问题:“我的 应用程序做了什么?”。如果你不能回答 用一句话,也许你可以 用cleaner把它分成几个应用程序 逻辑。

在我开始使用django后不久,我在某个地方读到了这个想法,我发现我经常问自己这个问题,这对我很有帮助。

你的应用程序不必是可重用的,它们可以相互依赖,但它们应该做一件事。

其他回答

试着回答问题:“我的 应用程序做了什么?”。如果你不能回答 用一句话,也许你可以 用cleaner把它分成几个应用程序 逻辑。

在我开始使用django后不久,我在某个地方读到了这个想法,我发现我经常问自己这个问题,这对我很有帮助。

你的应用程序不必是可重用的,它们可以相互依赖,但它们应该做一件事。

在这里,Django的创建者们自己指出了这种差异。 我认为考虑应用程序必须在其他项目中可重用是件好事。Django提供了现代的web应用程序,这也是一种很好的思考方式。

假设你正在创建基于JavaScript的大型动态web应用。

你可以在django中创建一个名为“FrontEnd”的应用程序——在这个应用程序中你会显示内容。

然后创建一些后端应用程序。示例应用程序命名为“评论”,将存储用户的评论。“评论”应用程序本身不会显示任何东西。它只是一个API,用于动态JS网站的AJAX请求。

这样你就可以重用你的“评论”应用程序。你可以让它开源,而不用开放整个项目的源代码。这样你就能保持清晰的项目逻辑。

一旦你学会了使用startproject和startapp,就没有什么能阻止你在同一个Python包中组合“project”和“app”了。一个项目实际上只不过是一个设置模块,而一个应用程序实际上只不过是一个模型模块——其他一切都是可选的。

对于小型网站来说,这样做是完全合理的:

site/
    models.py
    settings.py
    tests.py
    urls.py
    views.py

如果是这样的话……在Django的项目方面。应用命名空间,我倾向于使用emyproduct。我的产品,当然这是不允许的

没有什么是不允许的。这是你的项目,没有人限制你。保留一个合理的名字是明智的。

我没有看到我的产品的任何部分在任何情况下是可重用的。直观地说,我将其称为“应用程序”。那么我是否将所有工作都放在一个“app”文件夹中?

在一个普通的django项目中,有很多应用程序(contrib apps)在每个项目中都会用到。

让我们假设你的项目只做一项任务,只有一个应用程序(我把它命名为main,因为整个项目都围绕着它,几乎是不可插入的)。这个项目也仍然使用一些其他应用程序一般。

现在如果你说你的项目只使用一个应用程序(INSTALLED_APPS='myproduct'),那么项目定义项目为项目的用途是什么。app,我认为你应该考虑以下几点:

There are many other things that the code other than the app in a project handles (base static files, base templates, settings....i.e. provides the base). In the general project.app approach django automatically defines sql schema from models. Your project would be much easier to be built with the conventional approach. You may define some different names for urls, views and other files as you wish, but I don't see the need. You might need to add some applications in future which would be real easy with the conventional django projects which otherwise it may become equally or more difficult and tedious to do.

就应用程序中所做的大部分工作而言,我认为大多数django项目都是如此。

我发现下面这篇关于django应用程序和项目的博文非常有用:

http://www.b-list.org/weblog/2006/sep/10/django-tips-laying-out-application/ http://web.archive.org/web/20080302205555/www.pointy-stick.com/blog/2007/11/09/django-tip-developing-without-projects/

原则上,使用django你有很大的自由来组织你的产品的源代码。