복붙노트

[PYTHON] Django : ImproperlyConfigured : SECRET_KEY 설정을 비워서는 안됩니다.

PYTHON

Django : ImproperlyConfigured : SECRET_KEY 설정을 비워서는 안됩니다.

몇 가지 기본 설정을 포함하는 여러 설정 파일 (개발, 생산, ..)을 설정하려고합니다. 그래도 성공할 수는 없습니다. ./manage.py runserver를 실행하려고하면 다음 오류가 발생합니다.

(cb)clime@den /srv/www/cb $ ./manage.py runserver
ImproperlyConfigured: The SECRET_KEY setting must not be empty.

내 설정 모듈은 다음과 같습니다.

(cb)clime@den /srv/www/cb/cb/settings $ ll
total 24
-rw-rw-r--. 1 clime clime 8230 Oct  2 02:56 base.py
-rw-rw-r--. 1 clime clime  489 Oct  2 03:09 development.py
-rw-rw-r--. 1 clime clime   24 Oct  2 02:34 __init__.py
-rw-rw-r--. 1 clime clime  471 Oct  2 02:51 production.py

기본 설정 (SECRET_KEY 포함) :

(cb)clime@den /srv/www/cb/cb/settings $ cat base.py:
# Django base settings for cb project.

import django.conf.global_settings as defaults

DEBUG = False
TEMPLATE_DEBUG = False

INTERNAL_IPS = ('127.0.0.1',)

ADMINS = (
    ('clime', 'clime7@gmail.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        #'ENGINE': 'django.db.backends.postgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'cwu',                   # Or path to database file if using sqlite3.
        'USER': 'clime',                 # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# In a Windows environment this must be set to your system time zone.
TIME_ZONE = 'Europe/Prague'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'en-us'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = False

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = False # TODO: make this true and accustom date time input

DATE_INPUT_FORMATS = defaults.DATE_INPUT_FORMATS + ('%d %b %y', '%d %b, %y') # + ('25 Oct 13', '25 Oct, 13')

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = '/srv/www/cb/media'

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = '/media/'

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = '/srv/www/cb/static'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '8lu*6g0lg)9z!ba+a$ehk)xt)x%rxgb$i1&022shmi1jcgihb*'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.request',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.core.context_processors.tz',
    'django.contrib.messages.context_processors.messages',
    'web.context.inbox',
    'web.context.base',
    'web.context.main_search',
    'web.context.enums',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'watson.middleware.SearchContextMiddleware',
    'debug_toolbar.middleware.DebugToolbarMiddleware',
    'middleware.UserMemberMiddleware',
    'middleware.ProfilerMiddleware',
    'middleware.VaryOnAcceptMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'cb.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'cb.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    '/srv/www/cb/web/templates',
    '/srv/www/cb/templates',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'south',
    'grappelli', # must be before admin
    'django.contrib.admin',
    'django.contrib.admindocs',
    'endless_pagination',
    'debug_toolbar',
    'djangoratings',
    'watson',
    'web',
)

AUTH_USER_MODEL = 'web.User'

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'formatters': {
        'standard': {
            'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
            'datefmt' : "%d/%b/%Y %H:%M:%S"
        },
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        'null': {
            'level':'DEBUG',
            'class':'django.utils.log.NullHandler',
        },
        'logfile': {
            'level':'DEBUG',
            'class':'logging.handlers.RotatingFileHandler',
            'filename': "/srv/www/cb/logs/application.log",
            'maxBytes': 50000,
            'backupCount': 2,
            'formatter': 'standard',
        },
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter': 'standard'
        },
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
        'django': {
            'handlers':['console'],
            'propagate': True,
            'level':'WARN',
        },
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        'web': {
            'handlers': ['console', 'logfile'],
            'level': 'DEBUG',
        },
    },
}

LOGIN_URL = 'login'
LOGOUT_URL = 'logout'

#ENDLESS_PAGINATION_LOADING = """
#    <img src="/static/web/img/preloader.gif" alt="loading" style="margin:auto"/>
#"""
ENDLESS_PAGINATION_LOADING = """
    <div class="spinner small" style="margin:auto">
        <div class="block_1 spinner_block small"></div>
        <div class="block_2 spinner_block small"></div>
        <div class="block_3 spinner_block small"></div>
    </div>
"""

DEBUG_TOOLBAR_CONFIG = {
    'INTERCEPT_REDIRECTS': False,
}

import django.template.loader
django.template.loader.add_to_builtins('web.templatetags.cb_tags')
django.template.loader.add_to_builtins('web.templatetags.tag_library')

WATSON_POSTGRESQL_SEARCH_CONFIG = 'public.english_nostop'

설정 파일 중 하나 :

(cb)clime@den /srv/www/cb/cb/settings $ cat development.py 
from base import *

DEBUG = True
TEMPLATE_DEBUG = True

ALLOWED_HOSTS = ['127.0.0.1', '31.31.78.149']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'cwu',
        'USER': 'clime',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

MEDIA_ROOT = '/srv/www/cb/media/'

STATIC_ROOT = '/srv/www/cb/static/'

TEMPLATE_DIRS = (
    '/srv/www/cb/web/templates',
    '/srv/www/cb/templates',
)

manage.py의 코드 :

(cb)clime@den /srv/www/cb $ cat manage.py 
#!/usr/bin/env python
import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cb.settings.development")

    from django.core.management import execute_from_command_line

    execute_from_command_line(sys.argv)

베이스 가져 오기에서 * /srv/www/cb/cb/settings/__init__.py (그렇지 않으면 비어 있음)에 추가하면 마술처럼 작동하기 시작하지만 그 이유는 알 수 없습니다. 아무도 나에게 여기서 무슨 일이 일어날 지 설명 할 수 있니? 그것은 일부 파이썬 모듈 마법이어야합니다.

편집 : 나는 또한 base.py 에서이 줄을 제거하면 모든 일을 시작합니다

django.template.loader.add_to_builtins('web.templatetags.cb_tags')

web.templatetags.cb_tags에서이 줄을 제거하면 작동하기 시작합니다.

from endless_pagination.templatetags import endless

나는 그것이 결국, 그것이 이어지는 것이기 때문에 그것이라고 생각한다.

from django.conf import settings
PER_PAGE = getattr(settings, 'ENDLESS_PAGINATION_PER_PAGE', 10)

그래서 이상한 순환 물건과 게임을 만듭니다.

해결법

  1. ==============================

    1.나는 동일한 오류가 있었으며 설정에 의해로드 된 무언가와 설정 모듈 자체 사이에 순환 종속성이있는 것으로 나타났습니다. 내 경우에는 설정을로드하려고 시도한 설정에서 명명 된 미들웨어 클래스였습니다.

    나는 동일한 오류가 있었으며 설정에 의해로드 된 무언가와 설정 모듈 자체 사이에 순환 종속성이있는 것으로 나타났습니다. 내 경우에는 설정을로드하려고 시도한 설정에서 명명 된 미들웨어 클래스였습니다.

  2. ==============================

    2.나는 다니엘 그린 필드 (Daniel Greenfield)의 책 두 장의 장고 (Django)에서 나온 지침에 따라 설정을 재구성 한 후에 같은 문제에 부딪혔다.

    나는 다니엘 그린 필드 (Daniel Greenfield)의 책 두 장의 장고 (Django)에서 나온 지침에 따라 설정을 재구성 한 후에 같은 문제에 부딪혔다.

    문제를 해결하기 위해

    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings.local")
    

    manage.py 및 wsgi.py.

  3. ==============================

    3.나는 python manage.py runserver와 동일한 오류가 발생했습니다.

    나는 python manage.py runserver와 동일한 오류가 발생했습니다.

    필자에게 그것은 오래된 컴파일 된 바이너리 (.pyc) 파일 때문이었습니다. 내 프로젝트에서 이러한 모든 파일을 삭제 한 후 서버가 다시 실행되기 시작했습니다. :)

    따라서이 오류가 발생하면 어디서든, 즉 장고 설정과 관련하여 겉보기와 관련하여 변경하지 않고도 이것이 좋은 첫 번째 조치가 될 수 있습니다.

  4. ==============================

    4..pyc 파일을 제거하십시오.

    .pyc 파일을 제거하십시오.

    .pyc 삭제를위한 우분투 터미널 명령 : 찾아라. -name "* .pyc"-exec rm -rf {} \;

    나는 python manage.py runserver를했을 때 같은 오류가 발생했다. 그것은 .pyc 파일 때문이었습니다. 프로젝트 디렉터리에서 .pyc 파일을 삭제 한 다음 작동했습니다.

  5. ==============================

    5.base.py에서는 기본 설정 파일에 필요한 모든 정보를 가지고 있기 때문에 작업을 시작합니다. 당신은 라인이 필요합니다 :

    base.py에서는 기본 설정 파일에 필요한 모든 정보를 가지고 있기 때문에 작업을 시작합니다. 당신은 라인이 필요합니다 :

    SECRET_KEY = '8lu*6g0lg)9z!ba+a$ehk)xt)x%rxgb$i1&amp;022shmi1jcgihb*'
    

    따라서 작동하고 기본 가져 오기 *에서 할 때 SECRET_KEY를 자신의 development.py로 가져옵니다.

    사용자 지정 설정을 수행하기 전에 항상 기본 설정을 가져와야합니다.

    편집하다: 또한 django가 패키지에서 개발을 import 할 때 base import *를 정의한 이후 base 내부의 모든 변수를 초기화합니다. __init__.py

  6. ==============================

    6.설정 파일을 지정하지 않았습니다.

    설정 파일을 지정하지 않았습니다.

    python manage.py runserver --settings=my_project.settings.develop
    
  7. ==============================

    7.환경 오류라고 생각합니다. 설정을 시도해야합니다 : DJANGO_SETTINGS_MODULE = 'correctly_settings'

    환경 오류라고 생각합니다. 설정을 시도해야합니다 : DJANGO_SETTINGS_MODULE = 'correctly_settings'

  8. ==============================

    8.Django 1.5와 1.6 모두에서 virtualenv에 대한 모든 활성 세션을 비활성화하고 다시 시작하여 OS X에서 발생하는이 문제를 해결했습니다.

    Django 1.5와 1.6 모두에서 virtualenv에 대한 모든 활성 세션을 비활성화하고 다시 시작하여 OS X에서 발생하는이 문제를 해결했습니다.

  9. ==============================

    9.DB에 생성 할 수 없도록 내 settings.py 파일에서 데이터베이스 이름의 철자가 잘못되었을 때이 오류가 발생한다는 것을 추가하고 싶습니다.

    DB에 생성 할 수 없도록 내 settings.py 파일에서 데이터베이스 이름의 철자가 잘못되었을 때이 오류가 발생한다는 것을 추가하고 싶습니다.

  10. ==============================

    10.필자는 1.8.4에서이 문제를 오타가있는 TEMPLATES 설정을 수정하여 해결했습니다 (TEMPLATES [ 'debug']를 제거하면 해결됨)

    필자는 1.8.4에서이 문제를 오타가있는 TEMPLATES 설정을 수정하여 해결했습니다 (TEMPLATES [ 'debug']를 제거하면 해결됨)

    최근에 변경 한 설정을 검토하고 모든 키가 책으로되어 있는지 확인하십시오.

  11. ==============================

    11.나는 셀러리와 같은 문제가 있었다. 내 setting.py하기 전에 :

    나는 셀러리와 같은 문제가 있었다. 내 setting.py하기 전에 :

    SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
    

    후:

    SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', <YOUR developing key>)
    

    환경 변수가 정의되지 않은 경우 : SECRET_KEY = 개발중인 키

  12. ==============================

    12.내 .env 파일에서 등호 (=) 주위의 공백을 제거하여이 문제를 해결했습니다.

    내 .env 파일에서 등호 (=) 주위의 공백을 제거하여이 문제를 해결했습니다.

  13. ==============================

    13.믹스에 또 다른 잠재적 인 해결책을 던지기 위해서, settings 폴더와 settings.py를 프로젝트 디렉토리에 두었습니다. (필자는 환경 기반 설정 파일을 하나의 파일로 되돌리고있었습니다.

    믹스에 또 다른 잠재적 인 해결책을 던지기 위해서, settings 폴더와 settings.py를 프로젝트 디렉토리에 두었습니다. (필자는 환경 기반 설정 파일을 하나의 파일로 되돌리고있었습니다.

    파이썬은 project / settings.py 또는 project / settings / __ init__.py를 가져오고 싶었는지 혼란스러워졌습니다. 내가 설정을 제거하고 모든 것이 잘 작동합니다.

  14. ==============================

    14.제 경우에는 문제가있었습니다 - 내 app_folder 및 settings.py 있습니다. 그런 다음 app_folder 내에 Settings 폴더를 만들기로 결정했는데 settings.py와 충돌이 발생했습니다. Settings 폴더의 이름을 바꿨습니다. 모든 것이 작동했습니다.

    제 경우에는 문제가있었습니다 - 내 app_folder 및 settings.py 있습니다. 그런 다음 app_folder 내에 Settings 폴더를 만들기로 결정했는데 settings.py와 충돌이 발생했습니다. Settings 폴더의 이름을 바꿨습니다. 모든 것이 작동했습니다.

  15. ==============================

    15.PyCharm을 사용하는 모든 사용자 : pyMan manage.py runserver 127.0.0.1:8000 --settings = app_name.settings.development를 실행하는 동안 녹색의 "선택한 구성 실행"버튼이 오류를 생성합니다.

    PyCharm을 사용하는 모든 사용자 : pyMan manage.py runserver 127.0.0.1:8000 --settings = app_name.settings.development를 실행하는 동안 녹색의 "선택한 구성 실행"버튼이 오류를 생성합니다.

    이 문제를 해결하려면 구성의 환경 변수를 편집해야합니다. 이렇게하려면 녹색 실행 버튼의 왼쪽에있는 "실행 / 디버그 구성 선택"드롭 다운 메뉴를 클릭 한 다음 "구성 편집"을 클릭하십시오. "환경"탭에서 환경 변수 DJANGO_SETTINGS_MODULE을 app_name.settings.development로 변경하십시오.

  16. ==============================

    16.init.py 설정 디렉토리에서 다음과 같이 올바른 가져 오기를 작성하십시오.

    init.py 설정 디렉토리에서 다음과 같이 올바른 가져 오기를 작성하십시오.

    from Project.settings.base import *
    

    wsgi.py 또는 manage.py를 변경할 필요가 없습니다.

  17. from https://stackoverflow.com/questions/19128540/django-improperlyconfigured-the-secret-key-setting-must-not-be-empty by cc-by-sa and MIT license