【问题标题】:What’s the difference between a project and an app in Django world?Django 世界中的项目和应用程序有什么区别?
【发布时间】:2023-03-28 08:55:01
【问题描述】:

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

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

【问题讨论】:

标签: python django


【解决方案1】:

项目指整个应用程序及其所有部分。

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

对于您的示例,项目 是整个网站。您可以对其进行结构化,以便有一个用于文章的 app、一个用于排名表的 app 以及一个用于夹具和结果的 app。如果它们需要相互交互,它们可以通过文档齐全的公共类和访问器方法来实现。

要记住的主要事情是应用程序之间的这种相互依赖程度。在实践中,这都是一个项目,所以没有必要过火,但请记住两个应用程序的相互依赖程度。如果您发现一个应用程序解决了两个问题,请将它们拆分为两个应用程序。如果您发现两个应用程序如此交织在一起,以至于您永远无法重复使用其中的一个应用程序,请将它们组合成一个应用程序。

【讨论】:

  • 应用程序可以相互依赖,但它们应该做一件事。
【解决方案2】:

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

假设你正在用 Django 构建一个在线购物网站(电子商务网站):

项目:

它只是您网站的名称。 Django 将创建一个python package 并给它一个您提供的名称。假设我们将其命名为 my_shopping_site

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

python manage.py startproject my_shopping_site

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

my_shopping_site/
   manage.py
   my_shopping_site/    # package
        __init__.py     # indication of package
        settings.py     # module 1
        urls.py         # module 2
        wsgi.py         # module 3

应用:

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

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

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

  • 个人资料:- 包含用户信息的逻辑。

    -----------------------------------------------------------
    my_shopping_site              Products     Profile     Cart
    -----------------------------------------------------------
    

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

python manage.py startapp cart
python manage.py startapp products
python manage.py startapp profile

结构如下所示:

my_shopping_site/   # project name
      manage.py
      products/          # app 1
      cart/              # app 2 
      profile/           # app 3
      my_shopping_site/

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

【讨论】:

  • 好@Ahtisham!
  • @Ahtisham 最初创建的 my_shopping_site 是否也算作应用程序?例如,当 startproject 运行时,在自动创建的目录中开始编写应用程序是否是一个好的约定?
【解决方案3】:

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

Apps,旨在为您的项目带来模块化。例如,如果您构建了一个articles app理想情况下,您可以在您的体育新闻项目中使用它,并在需要它的新项目中重新使用它,只需对其 @ 进行最少修改或不修改987654325@——比如说一个博客项目。

应用是可以重复使用的软件。您的项目仅代表您非常具体的需求。

看看Django Project Structure。它可能会让您对组织 Django 项目的最佳实践有所了解。

还有几篇可在 Google 上搜索到的博客文章讨论了这个主题:

【讨论】:

  • Django 项目结构链接已失效。你知道它去哪儿了吗?
  • @dsjoerg 感谢您告诉我。刚刚更新了答案。
【解决方案4】:

根据 Django 官方文档

项目与应用

项目和应用程序有什么区别?应用程序是 Web 做某事的应用程序——例如,一个Weblog系统,一个数据库 公共记录或小型投票应用程序。一个项目是一个集合 特定网站的配置和应用程序。一个项目可以包含 多个应用程序。一个应用可以在多个项目中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2015-11-13
    • 2010-10-02
    • 2011-08-18
    • 2015-10-01
    • 1970-01-01
    相关资源
    最近更新 更多