Django:INSTALLED_APPS 是“.apps.AppConfig” 多余的吗?

Django: INSTALLED_APPS is ".apps.AppConfig" redundant?

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

在这个例子中 "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',
]

所以我有 2 个问题

  1. 在 "myapp" 之后添加 "apps.MyappConfig" 是多余的吗?
  2. 如果它有一些重要性,它是什么?
  1. Is adding the "apps.MyappConfig" after "myapp" redundant?

通常是,但不总是。如果你自己没有在INSTALLED_APP中指定AppConfig,那么Django会在模块中寻找default_app_config变量,正如文档中指定的那样:

When INSTALLED_APPS contains the dotted path to an application module, Django checks for a default_app_config variable in that module.

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

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

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

  1. 如果它有一些重要性,它是什么?

一个AppConfig [Django-doc] is a class in your application that contains meta-data about the application. It contains for example the name of the app, the label, the path, et. Furthermore you can override methods like .ready() [Django-doc]。如果加载模型,将调用此方法,通常用于执行一些管理任务,或在 Django 启动时加载信号。

我们可以制作多个 AppConfig,例如一个用于开发,一个用于生产,一个用于测试。但这种情况并不经常发生。

来自Django's docs

To configure an application, subclass AppConfig and put the dotted path to that subclass in INSTALLED_APPS.

If there is no default_app_config, Django uses the base AppConfig class

如果您需要添加额外的应用配置(例如导入信号),您可以在您的应用配置中执行此操作,然后需要将其包含在您的 INSTALLED_APPS. 否则,您只能在 INSTALLED_APPS

中包含您的应用

所以回答你的问题:

Is adding the "apps.MyappConfig" after "myapp" redundant?

没有

If there is some importance to it, what is it?

是,添加额外配置