Django世界中的项目和应用程序有什么区别?

Ali*_*ssa 47 python django

我正在使用Django创建我的第一个真正的网站,但我仍然在努力理解项目和应用程序之间的差异.

例如,我的网站是一个体育新闻网站,其中包含文章,排名表和"固定装置和结果"等部分,我的问题是这些部分中的每一部分是否应该在整个项目中的单独应用程序中?在这种情况下最好的做法是什么?

Joh*_*Mee 61

一个项目是指整个应用程序及其所有部件.

一个应用程序是指项目的子模块.它是自给自足的,而不是与项目中的其他应用程序交织在一起,理论上,你可以把它拿起来并将其放到另一个项目中而不做任何修改.一个应用程序通常都有自己的models.py(这实际上可能是空的).您可能会将其视为独立的python模块.一个简单的项目可能只有一个应用程序.

对于您的示例,该项目是整个网站.所以还有一个你可能构建它的应用程序的文章,一个应用程序的排名表,以及应用程序的固定装置和结果.如果他们需要彼此互动,他们通过记录良好的公共类和访问器方法来实现.

要记住的主要事情是应用程序之间的这种相互依赖程度.实际上它只是一个项目,因此没有任何意义,但要记住两个应用程序是如何相互依赖的.如果您发现一个应用正在解决两个问题,请将它们分成两个应用.如果你发现两个应用程序是如此交织在一起,你就永远不能重复使用另一个应用程序,将它们组合成一个应用程序.

  • 应用程序可以相互依赖,但它们应该做一件事。 (3认同)

Aht*_*ham 19

让我们通过这个现实示例来了解Django中的Project和App:

假设您正在Django中建立在线购物网站(电子商务网站):

项目:

它只是您网站的名称。Django将创建一个python包,并为其提供一个名称。可以说我们将其命名为 my_shopping_site

您可以使用以下命令在Django中创建项目

python manage.py startproject my_shopping_site
Run Code Online (Sandbox Code Playgroud)

这将my_shopping_site在您的工作目录中创建目录,其结构如下所示:

my_shopping_site/
         manage.py
         my_shopping_site/            #<--- That is a python package
                 __init__.py          #<--- This makes it a python package
                 settings.py          #<--- module 1
                 urls.py              #<--- module 2
                 wsgi.py              #<--- module 3
Run Code Online (Sandbox Code Playgroud)

应用:

它是构成项目的那些小组件。它们是您项目的功能。在我们的案例(购物网站)中,它将是:

  • 购物车:-具有用于用户选择要购买的商品的逻辑。

  • 产品:-该网站销售的产品具有逻辑。

  • 概要文件:-具有用于用户信息的逻辑。

             -------------------------------------------------------------------
              my_shopping_site                    Products     Profile     Cart
             -------------------------------------------------------------------
    
    Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令创建这些应用:

     python manage.py startapp cart
     python manage.py startapp products
     python manage.py startapp profile
Run Code Online (Sandbox Code Playgroud)

结构如下所示:

my_shopping_site/                 #<--- project_name
             manage.py
             products/            #<--- app 1
             cart/                #<--- app 2 
             profile/             #<--- app 3
             my_shopping_site/
Run Code Online (Sandbox Code Playgroud)

每个应用程序都专注于项目的单个逻辑部分。

  • @Ahtisham 最初创建的 my_shopping_site 也算作应用程序吗?例如,当 startproject 运行时,在自动创建的目录中开始编写应用程序是一个好的约定吗? (2认同)

Pau*_* Bu 15

理想情况下,您的项目应由应用程序组成.这就是为什么在使用命令行时,您创建一个项目,稍后,将该应用程序添加到该项目.

应用程序旨在为您的项目带来模块化.例如,如果你建立一个articles app,理想,您可以在体育新闻项目中使用它,并在一个新的项目,它需要以最小的或不修改其重新使用它settings-说博客项目为例.

应用程序是一块可以重用的软件.您的项目仅代表您的特定需求.

看看Django项目结构.它可以让您对组织Django项目的最佳实践有所了解.

还可以在Google上搜索一些可以解决此主题的博客文章: