【问题标题】:Django: INSTALLED_APPS is ".apps.AppConfig" redundant?Django:INSTALLED_APPS 是“.apps.AppConfig”多余的吗?
【发布时间】:2019-12-08 13:14:02
【问题描述】:

我没有看到这个问题的答案版本,这真的让我很困扰,因为我看到两者都被使用了。

在本例中,“myapp”是创建的应用程序。

我不断看到用户在 INSTALLED_APPS 列表中设置他们的应用,如下所示:

INSTALLED_APPS = [
    'myapp',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

而不是

INSTALLED_APPS = [
    'myapp.apps.MyappConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

所以我有两个问题

  1. 在“myapp”之后添加“apps.MyappConfig”是否多余?
  2. 如果它很重要,它是什么?

【问题讨论】:

  • 不是本身,例如如果有多个AppConfigs。

标签: python django django-settings


【解决方案1】:

来自Django's docs

要配置应用程序,请将 AppConfig 子类化并将该子类的虚线路径放在 INSTALLED_APPS 中。

如果没有 default_app_config,Django 使用基础 AppConfig 类

如果您需要添加额外的应用配置(例如导入信号),您可以在您的应用配置中这样做,然后需要将其包含在您的 INSTALLED_APPS 中。 否则,您只能将您的应用包含在INSTALLED_APPS

所以回答你的问题:

在“myapp”之后添加“apps.MyappConfig”是否多余?

没有

如果它很重要,它是什么?

是的,添加额外的配置

【讨论】:

    【解决方案2】:
    1. 在“myapp”之后添加“apps.MyappConfig”是否多余?

    通常是,但并非总是。如果您自己没有在INSTALLED_APP 中指定AppConfig,那么Django 将在模块中查找default_app_config 变量,如文档中所述:

    INSTALLED_APPS 包含应用程序模块的虚线路径时,Django 检查该模块中的default_app_config 变量

    例如在django.contrib.sessions module [GitHub],我们看到:

    <b>default_app_config</b> = 'django.contrib.sessions.apps.SessionsConfig'

    但是可以在一个模块中定义多个AppConfigs,每个都会稍微改变应用程序的行为。请参阅下一节:

    1. 如果它很重要,它是什么?

    AppConfig [Django-doc] 是应用程序中的一个类,其中包含有关应用程序的元数据。它包含例如应用程序的名称、标签、路径等。此外,您可以覆盖 .ready() [Django-doc] 之类的方法。这个方法会在模型加载完成后被调用,通常用于做一些管理任务,或者在 Django 启动时加载信号。

    我们可以创建多个AppConfigs,例如一个用于开发,一个用于生产,一个用于测试。但这并不经常发生。

    【讨论】:

      猜你喜欢
      • 2016-01-07
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多