Django 3.2 异常:django.core.exceptions.ImproperlyConfigured

viv*_*a70 8 python django django-3.2

我正在升级到 django 3.2,但根据它的发行说明,它说:

现在在第一次访问时检查 SECRET_KEY 设置的有效值,而不是在第一次加载设置时。这允许运行不依赖于 SECRET_KEY 的管理命令,而无需提供值。因此,在不提供有效 SECRET_KEY 的情况下调用 configure(),然后继续访问 settings.SECRET_KEY 现在将引发 ImproperlyConfigured 异常。

错误: django.core.exceptions.ImproperlyConfigured: Cannot import 'users'. Check that 'apps.users.apps.UsersConfig.name' is correct.

用户应用程序.py:

from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'
Run Code Online (Sandbox Code Playgroud)

我认为这个错误是因为它与 django==3.1.7 一起工作。有人可以帮我解决这个问题吗?如何检查我的密钥是否有效并在需要时生成新密钥?

Ala*_*air 16

我认为您的错误与SECRET_KEY您的问题中的更改没有直接关系。

AppConfig.name应该是应用程序的完整 Python 路径。由于您似乎users在一个apps模块内,您应该使用'apps.users'而不是'users'

class UsersConfig(AppConfig):
    name = 'apps.users'
Run Code Online (Sandbox Code Playgroud)

  • 在 Django 2.1 中你也应该有 `name = 'apps.users'` 。您的问题中没有足够的代码来重现该问题,因此我们无法判断为什么它在以前的版本上有效,然后在 Django 3.2 中停止工作。Django 3.2 中的 [app config discovery](https://docs.djangoproject.com/en/3.2/releases/3.2/#automatic-appconfig-discovery) 发生了变化,所以也许与此相关。 (2认同)

ged*_*lod 8

如果您的 django 应用程序位于类似 ( app,appsapplications等) 的文件夹中,则必须在 app_name/apps.py 文件中指定该name属性的绝对路径,请参见下图。

Fugure 1.1 django 应用 vscode 演示

在此图像上,我的users(1) 应用程序位于app文件夹中,这就是为什么必须使用app.users(3)、(4) 的原因。


She*_*erd 6

我在 Django 3.2 中突然遇到这个问题。为什么现在我不太确定,但将其添加到我的 settings.py 文件中为我解决了这个问题。我需要了解导致此问题的结构性问题。这可能是因为我们的 Django 项目包含许多组合在一起的应用程序。

from django.apps import AppConfig

AppConfig.default = False
Run Code Online (Sandbox Code Playgroud)

https://docs.djangoproject.com/en/3.2/ref/applications/#django.apps.AppConfig.default

您还可以在应用程序级别单独设置此功能。这可能是一个更好的解决方案。我仍然不明白为什么这是必要的。

from django.apps import AppConfig


class DashboardConfig(AppConfig):
    name = 'dashboard'
    default = False
Run Code Online (Sandbox Code Playgroud)


Ped*_*o A 5

我的解决方案是简单地完全删除该apps.py文件 - Django 现在设法自动找到该应用程序。