Django:INSTALLED_APPS是否为“ .apps.AppConfig”冗余?

时间:2019-12-08 13:14:02

标签: python django django-settings

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

在此示例中,“ 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. 如果有什么重要性,那是什么?

2 个答案:

答案 0 :(得分:4)

来自Django's docs

  

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

  

如果没有default_app_config,则Django使用基本的AppConfig类

如果您需要添加其他应用程序配置(例如,导入Signals),可以在应用程序配置中添加,然后将其包含在INSTALLED_APPS中。 否则,您只能在INSTALLED_APPS

中包含您的应用

所以回答您的问题:

  

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

  

如果有什么重要性,那是什么?

是的,添加额外的配置

答案 1 :(得分:1)

  
      
  1. 是否要在“ myapp”冗余之后添加“ apps.MyappConfig”?
  2.   

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

  

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

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

default_app_config = 'django.contrib.sessions.apps.SessionsConfig'

但是,可以在一个模块中定义多个AppConfig,每个都可以轻而易举地改变应用程序的行为。参见下一部分:

  1. 如果有什么重要性,那是什么?

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

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