如何解决 Django 中的“请求设置 INSTALLED_APPS,但未配置设置。”错误?

Posted

技术标签:

【中文标题】如何解决 Django 中的“请求设置 INSTALLED_APPS,但未配置设置。”错误?【英文标题】:How to resolve `Requested setting INSTALLED_APPS, but settings are not configured.` error in Django? 【发布时间】:2020-03-07 12:31:04 【问题描述】:

运行views.py 文件时出现以下错误。请注意,它导入ratesEUR 模型之前可以正常工作:

views.py(根据@sayse 的回复):

from django.shortcuts import render
from models import ratesEUR
import json
import requests

def my_view(request):

response = requests.get("http://data.fixer.io/api/latest?access_key=XXX&base=EUR")

    rates_EUR = json.loads(response.content.decode('utf-8'))
    timestamp = rates_EUR['timestamp']
    base = rates_EUR['base']
    date = rates_EUR['date']
    rates = rates_EUR['rates']
    id = 1

    rates_new = ratesEUR(id=id, timestamp=timestamp, base=base, date=date, rates=rates)
    rates_new.save()

    return response(data=)

根据错误:

Traceback (most recent call last):
  File "C:\Users\Jonas\Desktop\dashex\Quotes_app\views.py", line 2, in <module>
    from models import ratesEUR
  File "C:\Users\Jonas\Desktop\dashex\Quotes_app\models.py", line 4, in <module>
    class ratesEUR(models.Model):
  File "C:\Users\Jonas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\db\models\base.py", line 103, in __new__
    app_config = apps.get_containing_app_config(module)
  File "C:\Users\Jonas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\apps\registry.py", line 252, in get_containing_app_config
    self.check_apps_ready()
  File "C:\Users\Jonas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\apps\registry.py", line 134, in check_apps_ready
    settings.INSTALLED_APPS
  File "C:\Users\Jonas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\conf\__init__.py", line 79, in __getattr__
    self._setup(name)
  File "C:\Users\Jonas\AppData\Local\Programs\Python\Python37-32\lib\site-packages\django\conf\__init__.py", line 64, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
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 accessing settings.
[Finished in 0.41s]

models.py:

from django.db import models


class ratesEUR(models.Model):
    timestamp = models.CharField(max_length=10)
    base = models.CharField(max_length=3)
    date = models.DateField(auto_now=False, auto_now_add=False)
    rates = models.CharField(max_length=8)

    def __str__(self):
        return self.base

settings.py:

import os.path
import os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Static files (CSS, javascript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/


STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join('static'), )


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ["127.0.0.1", "locahost"]


# Application definition

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

项目目录:

我已经尝试过的:

export DJANGO_SETTINGS_MODULE=dashex.settings插入并保存到venv/bin/activate的代码底部,但我的myvirtualenv文件夹中根本没有这样的目录。

链接:ImproperlyConfigured: You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings

正在运行export DJANGO_SETTINGS_MODULE=dashex.settings。这导致我的 shell 出现语法错误。

链接:ImproperlyConfigured: Requested setting INSTALLED_APPS, but settings are not configured - Scraper

根据 Django 官方文档将 DJANGO_SETTINGS_MODULE = DASHEX.settings 插入到我的 settings.py 文件中,但没有任何效果。

链接:https://docs.djangoproject.com/en/1.10/topics/settings/#designating-the-settings

那么,我可以在哪里以及如何按照错误本身的建议定义 the environment variable DJANGO_SETTINGS_MODULE 以 - 可能 - 解决这个问题?

非常感谢您的帮助!

【问题讨论】:

所有代码当前都在视图之外 无法按照您的输入:-/ 除了你的导入和你的views.py的最后2行之外,它都在视图之外,它应该做什么? 这个想法是从第三方 API 调用数据并用它填充模型ratesEUR。 (models.py 添加到初始帖子中) 作为初始数据?你应该做一个管理命令 【参考方案1】:

你的视图,不是视图,它只是第一次从views.py导入时运行的代码,你需要把它变成一个视图

def my_view(request):

    response = requests.get("http://data.fixer.io/api/latest?access_key=XXX&base=EUR")

    rates_EUR = json.loads(response.content.decode('utf-8'))
    timestamp = rates_EUR['timestamp']
    base = rates_EUR['base']
    date = rates_EUR['date']
    rates = rates_EUR['rates']
    id = 1

    rates_new = ratesEUR(id=id, timestamp=timestamp, base=base, date=date, rates=rates)
    rates_new.save()

    return JsonResponse(data=)

【讨论】:

感谢您的意见!我更新了views.py,但运行它时仍然出现同样的错误。此外,服务器调试No module named models。有些东西似乎仍然很奇怪。【参考方案2】:

您真正的问题是您试图直接运行 views.py 脚本,这不是 django 的工作方式,可以通过您设置的 url 访问视图。

你的两个选择,

要么像平常一样使用 url 调用视图

使用 django shell

python manage.py shell

from .views import my_view
my_view(None)

【讨论】:

知道了!非常感谢。最后一个问题:假设我喜欢每 120 秒从外部 API 获取数据,那么视图可能不是一个好主意,因为我需要每 120 秒访问一次 url?使用 Django/python 每 120 秒获取第三方 API 并将数据填充到模型中的正确方法是什么?谢谢! @Phanti - 这根本不是一个坏主意,这正是您需要做的事情,而这正是您使用第三方 api 端点所做的事情 但是如果没有人访问相关的 url,如何让视图每 120 秒执行一次呢? (这个问题可能很愚蠢:-p)。 对任务运行器的研究——芹菜等【参考方案3】:

第一个建议是使用from .models 而不是from models,第二个建议是缩进响应,使其位于视图中,因为在第 2 行的问题通过后,您将收到语法错误。

settings.py 是什么样的?您是否将应用添加到已安装的应用变量中?

【讨论】:

使用 from .models 我最终得到了这个错误:Traceback (most recent call last): File "C:\Users\Jonas\Desktop\dashex\Quotes_app\views.py", line 1, in &lt;module&gt; from .models import ratesEUR ModuleNotFoundError: No module named '__main__.models'; '__main__' is not a package [Finished in 0.09s]settings.py 添加到初始帖子中。

以上是关于如何解决 Django 中的“请求设置 INSTALLED_APPS,但未配置设置。”错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Django 中的以下错误:“OperationalError:外键不匹配”

如何解决 Heroku 上托管的 django 项目中的迁移问题?

如何解决 .accepted_renderer 未在 Django 中的响应错误上设置

如何解决 Django 中的“请求设置 INSTALLED_APPS,但未配置设置。”错误?

如何解决 django rest-framework 中的错误请求

未解决的参考:PyCharm 中的“django”错误