【问题标题】:Django project 'Improperly Configured: Requested settings INSTALLED APPS' ErrorDjango 项目“配置不当:请求的设置安装应用程序”错误
【发布时间】:2020-09-29 08:01:30
【问题描述】:

我需要帮助来解决当我尝试使用 Django 代码运行任何 python 脚本时出现的错误。

这是错误:

****PS C:\Users\pebr6\Desktop\tutorial> & c:/Users/pebr6/Desktop/pythonEnvironments/1.0/Scripts/Activate.ps1
(1.0) PS C:\Users\pebr6\Desktop\tutorial> & c:/Users/pebr6/Desktop/pythonEnvironments/1.0/Scripts/python.exe c:/Users/pebr6/Desktop/tutorial/aplicaciones/principal/models.py
Traceback (most recent call last):
  File "c:/Users/pebr6/Desktop/tutorial/aplicaciones/principal/models.py", line 5, in <module>
    class Person(models.Model):
  File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\db\models\base.py", line 107, in __new__
    app_config = apps.get_containing_app_config(module)
  File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\apps\registry.py", line 252, in get_containing_app_config
    self.check_apps_ready()
  File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\apps\registry.py", line 134, in check_apps_ready
    settings.INSTALLED_APPS
  File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\conf\__init__.py", line 76, in __getattr__
    self._setup(name)
  File "C:\Users\pebr6\Desktop\pythonEnvironments\1.0\lib\site-packages\django\conf\__init__.py", line 57, in _setup
    raise ImproperlyConfigured(
django.core.exceptions.ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before acces**sing settings.******

我的项目结构如下:

Project structure

这是我在 settings.py 上的应用配置:

应用定义

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'aplicaciones.principal',
]

manage.py 文件里面有下面的代码:

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

最后一个,我的 wsgi.py 文件:

import os
import sys
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tutorial.settings')

application = get_wsgi_application()


sys.path.append('C:/Users/pebr6/Desktop/pythonEnvironments/1.0/Scripts/python.exe')

我的 python 版本是 3.8.3 用于 64 位窗口,我正在使用 virtualenv 创建不同的 python 环境。

全局环境开启:

C:\Users\pebr6\AppData\Local\Programs\Python\Python38\python.exe

我只是在这里安装了 virtualenv。

我的项目的虚拟环境在路径上:

c:\Users\pebr6\Desktop\pythonEnvironments\1.0\Scripts\python.exe

我这里安装了 django 和 django rest 框架。

我开始一个项目的步骤(例如)是:

  1. 创建文件夹(教程为实例)。

  2. 在教程文件夹中,我创建了另一个名为 env 的文件夹,在这里我使用 windows cmd 上的 virtualenv 1.0 创建了一个虚拟环境。

  3. 创建后,我切换到该环境并使用以下命令安装 django 和 django rest 框架:

    pip install django

    pip install djangorestframework

    python -m pip install django

    python -m pip install djangorestframework

  4. 然后,在教程文件夹中,我也使用以下方法创建了一个项目:

    django-admin startproject 教程。

  5. 在此之后,我使用命令创建了一个应用程序:

    ma​​nage.py startapp main

我也试过了:

django-admin startapp main

python manage.py startapp main

  1. 当我在 VS Code 上打开教程文件夹(包含 env、project 和 app 文件夹)时,IDE 要求我设置解释器,因此我在计算机上搜索以在我的虚拟环境路径中找到 python.exe:

c:\Users\pebr6\Desktop\pythonEnvironments\1.0\Scripts\python.exe

所以 settings.json 变成了这样:

"python.pythonPath": "c:\Users\pebr6\Desktop\pythonEnvironments\1.0\Scripts\python.exe"

  1. 最后我尝试在models.py或test.py上写一些代码,或者创建一个serializers.py并开始编码。当我运行任何脚本时,它都会引发异常。

从 64 位版本卸载 32 位的 python 3.8.3 版本后,错误开始发生。 我再次尝试全部卸载,我已经使用 virtualenv 在全局或虚拟环境中使用了这两个版本,并且错误仍然存​​在。

我不知道这是否重要,但这就是我在虚拟环境路径上的内容(我猜是我的 PYTHONPATH,不太确定):

PYTHONPATH

我尝试打开 manage.py shell 并运行命令:

导入系统

sys.path.append("c:\Users\pebr6\Desktop") 或 sys.path.append("c:\Users\pebr6\Desktop\tutorial")

但没有任何变化。

我希望有人可以帮助我解决这个问题,因为我是 python 新手,但我还不了解很多东西。谢谢!

【问题讨论】:

  • 您正在尝试执行您的models.py 脚本?
  • 您应该在tests.py 上进行测试并使用python manage.py test 运行它,您不应该运行models.py 或任何其他脚本。
  • 是的,我按照这个链接上的步骤django-rest-framework.org/tutorial/1-serialization
  • 在下面查看我的回答,它将指出您需要遵循的内容。
  • 首先我创建一个从models.Model扩展的类,然后创建序列化程序。一旦我这样做了,我将两者都导入到我的 test.py 并在那里,我从 MyClass(models.Model) 创建一个对象,并将序列化器也创建为 MyClassSerializer(MyClass)。最后,尝试查看生成 json 的数据并查看是否一切正常。但是自从我的models.py上的 class MyClass(models.Model): 行以来,异常一直存在

标签: python django python-3.x django-rest-framework


【解决方案1】:

好的,我终于可以解决问题了,这是因为我编写了错误的代码。

我有点困惑,因为在收到此错误之前,我运行了一些运行良好的代码。 当我更改 python 版本(卸载所有内容等等)时,我不得不开始一个新的 Django 项目,当我开始使用 models.Model 作为我的一个超类时,问题就来了自己的课,我上次没做过。

我想再次做的事情在下一个链接上:

https://www.django-rest-framework.org/api-guide/serializers/

  1. 在models.py上创建一个简单的类(例如Person)

  2. 然后为这个对象创建一个序列化器。

  3. 最后在另一个文件中,将它们都导入并在 test.py 上进行测试,只需创建我的 Person 类的实例,使用此实例创建序列化程序,最后生成要打印的 json。

但是当我尝试将我的 Person 类扩展到 models.Model 而不是 object 时出现异常,因为我正在阅读此链接中的内容:

https://www.django-rest-framework.org/tutorial/1-serialization/

两个教程都是正确的,但我是在将彼此的代码组合在一起并得到了那个错误。

python初学者的这种错误,谢谢!

【讨论】:

    【解决方案2】:

    你不应该像python models.py那样运行你的项目脚本,要使用django你必须先发出python manage.py

    如果你想测试你的代码,你应该在tests.py 上写一个测试。 Django's introductory tutorial 是开始学习如何在 Django 上进行测试的好地方。还有一个topic 仅用于测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-19
      • 2013-03-11
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2014-09-12
      • 2019-06-03
      • 2020-03-07
      相关资源
      最近更新 更多