Django-配置不正确

时间:2019-12-28 02:49:05

标签: python django

我不断收到ImproperlyConfigured异常,并且无法从日志中找到任何线索。我从日志中发现的只有以下几行:

Traceback (most recent call last):
  File "/Users/marshall/PycharmProjects/chitchat-config/manage.py", line 25, in <module>
    django.setup()
  File "/Users/marshall/Library/Python/3.7/lib/python/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/Users/marshall/Library/Python/3.7/lib/python/site-packages/django/conf/__init__.py", line 79, in __getattr__
    self._setup(name)
  File "/Users/marshall/Library/Python/3.7/lib/python/site-packages/django/conf/__init__.py", line 64, in _setup
    % (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting LOGGING_CONFIG, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

这是设置结构

manage.py
   app
    |---base.py
    |---logging.py
    |---dev_mac.py
  1. base.py
from decouple import config
import os
import logging

logger = logging.getLogger(__name__)

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

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app.models.Config',
    "common",
    "android",
    'users',
    "session",
    "friends",
    "tokens",
    "push"
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'app.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'app.wsgi.application'

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'app/db.sqlite3'),
    },

    'config': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'config',
        'USER': 'root',
        'PASSWORD': "",
        'HOST': 'localhost',
        'PORT': 3306,
        'OPTIONS': {
            'init_command': 'SET sql_mode="STRICT_TRANS_TABLES"'
        }
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Seoul'

USE_I18N = True

USE_L10N = True

USE_TZ = True

STATIC_URL = '/static/'

env = os.environ.get('DJANGO_SETTINGS_MODULE')

DJANGO_ROOT = ""

if env == 'app.dev':
    DJANGO_ROOT = 'C:\\Users\\PS_marshall\\PycharmProjects\\config'
elif env == 'app.dev_mac':
    DJANGO_ROOT = '/Users/marshall/PycharmProjects/chitchat-config'
else:
    DJANGO_ROOT = '/var/log'


LOGFILE = os.path.join(DJANGO_ROOT, 'chitchat-config.log')

  1. logger.py
import logging
from .base import LOGFILE

log = logging.getLogger(__name__)

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': '[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s',
            'datefmt': '%d/%b/%Y %H:%M:%S'
        },
    },
    'handlers': {
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': LOGFILE,
            'formatter': 'standard',
        },
    },
    'loggers': {
        'users': {
            'handlers': ['file'],
            'level': 'INFO',
        },
    },
    'root': {
        'handlers': ['file'],
        'level': 'INFO',
    },
}

  1. dev_mac.py
from .base import *

DEBUG = True
ALLOWED_HOSTS = ['127.0.0.1']

SECRET_KEY = config(
    'DJANGO_SECRET_KEY',
    'secret_key'
)
  1. manage.py
import os
import sys
from app.logger import log


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app.dev_mac')

    log.info('Starting the application..')

    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__':
    import django
    django.setup()
    main()

到目前为止,我所知道的是,一开始应用程序将选择环境,此代码中为dev_mac。然后,应用程序将读取dev_mac.py文件,该文件将导入base.py。

据我所知,当无法解析设置但由于日志未充分说明代码而无法获得任何线索时,就会发生此异常。

有人能找出并告诉我为什么会发生吗?

0 个答案:

没有答案