it-swarm.com.de

Django: Nicht ordnungsgemäß konfiguriert: Die Einstellung für SECRET_KEY darf nicht leer sein

Ich versuche, mehrere Einstellungsdateien (Entwicklung, Produktion, ..) einzurichten, die einige Grundeinstellungen enthalten. Kann aber nicht gelingen. Wenn ich versuche, ./manage.py runserver auszuführen, erhalte ich die folgende Fehlermeldung:

(cb)[email protected] /srv/www/cb $ ./manage.py runserver
ImproperlyConfigured: The SECRET_KEY setting must not be empty.

Hier ist mein Einstellungsmodul:

(cb)[email protected] /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

Basiseinstellungen (enthalten SECRET_KEY):

(cb)[email protected] /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', '[email protected]'),
)

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'

Eine der Einstellungsdateien:

(cb)[email protected] /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',
)

Code in manage.py:

(cb)[email protected] /srv/www/cb $ cat manage.py 
#!/usr/bin/env python
import os
import sys

if __== "__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)

Wenn ich from base import * zu /srv/www/cb/cb/settings/__init__.py hinzufüge (was sonst leer ist), fängt es magisch an zu arbeiten, aber ich verstehe nicht warum. Kann mir jemand erklären, was hier los ist? Es muss ein Python-Modul-Zauber sein.

EDIT: Alles fängt an zu funktionieren, wenn ich diese Zeile aus base.py entferne

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

Wenn ich diese Zeile von web.templatetags.cb_tags entferne, fängt es auch an zu arbeiten:

from endless_pagination.templatetags import endless

Ich denke, das liegt daran, dass es am Ende dazu führt 

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

So entsteht etwas komisches kreisförmiges Zeug und Spiel vorbei.

71
clime

Ich hatte den gleichen Fehler und es stellte sich als eine zirkuläre Abhängigkeit zwischen einem von den Einstellungen geladenen Modul oder einer Klasse und dem Einstellungsmodul selbst heraus. In meinem Fall war es eine Middleware-Klasse, die in den Einstellungen benannt wurde und die die Einstellungen selbst zu laden versuchte.

Ich hatte das gleiche Problem, nachdem ich die Einstellungen gemäß den Anweisungen von Daniel Greenfields Buch Two scoops of Django umgestellt hatte.

Ich habe das Problem durch Einstellen gelöst 

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

in manage.py und wsgi.py.

53
Jinesh

Ich hatte den gleichen Fehler mit python manage.py runserver.

Für mich stellte sich heraus, dass es sich um eine abgelaufene kompilierte Binärdatei (.pyc) handelte. Nachdem alle diese Dateien in meinem Projekt gelöscht wurden, wurde der Server erneut ausgeführt. :)

Wenn Sie diesen Fehler also aus dem Nichts erhalten, d.

17
akshay

Entfernen Sie .pyc-Dateien

Ubuntu-Terminalbefehl zum Löschen von .pyc: find . -name "*.pyc" -exec rm -rf {} \;

Ich habe dieselbe Fehlermeldung erhalten, als ich Python manage.py runserver ausgeführt habe. Es war weil .pyc-Datei. Ich löschte die .pyc-Datei aus dem Projektverzeichnis, dann funktionierte es.

11
Aslam Khan

Ich hatte die Einstellungsdatei nicht angegeben:

python manage.py runserver --settings=my_project.settings.develop
5
maugsburger

Es beginnt zu funktionieren, da Sie in der base.py alle erforderlichen Informationen in einer Grundeinstellungsdatei haben. Sie brauchen die Zeile:

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

Es funktioniert also und wenn Sie from base import * tun, importiert es SECRET_KEY in Ihren development.py.

Sie sollten immer grundlegende Einstellungen importieren, bevor Sie benutzerdefinierte Einstellungen vornehmen.


EDIT: Auch wenn Django die Entwicklung aus Ihrem Paket importiert, initialisiert es alle Variablen innerhalb der Basis, seit Sie from base import * in __init__.py definiert haben.

Ich denke, es ist der Umgebungsfehler , Sie sollten versuchen, die Einstellung vorzunehmen: Django_SETTINGS_MODULE='correctly_settings'

5
吾慎行

Ich hatte das gleiche Problem mit Sellerie. Meine Einstellung.py vor:

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

nach dem:

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

Wenn die Umgebungsvariablen nicht definiert sind, gilt Folgendes: SECRET_KEY =IHR Entwicklungsschlüssel

2
MrNinjamannn

Ich habe dieses Problem gelöst, das unter OS X mit Django 1.5 und 1.6 aufgetreten ist, indem alle aktiven Sitzungen für virtualenv deaktiviert und erneut gestartet wurden.

2
andilabs

Für alle, die PyCharm verwenden: Die grüne Schaltfläche "Ausgewählte Konfiguration ausführen" würde den Fehler verursachen, während py manage.py runserver 127.0.0.1:8000 --settings=app_name.settings.development ausgeführt wurde. 

Um dies zu beheben, müssen Sie die Umgebungsvariablen der Konfiguration bearbeiten. Klicken Sie dazu auf das Dropdown-Menü "Lauf/Debug-Konfiguration auswählen" links neben der grünen Schaltfläche und anschließend auf "Konfiguration bearbeiten". Ändern Sie auf der Registerkarte "Umgebung" die Umgebungsvariable Django_SETTINGS_MODULE in app_name.settings.development.

1
Jamie Williams

Ich wollte nur hinzufügen, dass ich diese Fehlermeldung erhielt, als mein Datenbankname in meiner settings.py-Datei falsch geschrieben wurde, sodass die Datenbank nicht erstellt werden konnte.

1
Lexo

Schreiben Sie in das Verzeichnis init . Py des Einstellungsverzeichnisses den korrekten Import, beispielsweise:

from Project.settings.base import *

Es ist nicht notwendig, wsgi.py oder manage.py zu ändern

1
cwhisperer

Ich habe dieses Problem am 1.8.4 behoben, indem ich die TEMPLATES-Einstellungen mit einem Tippfehler korrigiert habe (durch Entfernen von TEMPLATES ['debug'] wurde es gelöst)

Sehen Sie sich die Einstellungen an, die Sie in letzter Zeit geändert haben, und stellen Sie sicher, dass alle Tasten nach dem Buch sind.

1
oriadam

Ich habe dieses Problem gelöst, indem ich die Leerzeichen um Gleichheitszeichen (=) in meiner .env-Datei entfernte.

0
Aiven

Um eine andere mögliche Lösung in den Mix zu werfen, hatte ich einen settings-Ordner sowie einen settings.py in meinem Projektverzeichnis. (Ich habe von umgebungsbasierten Einstellungsdateien wieder zu einer Datei gewechselt. Seitdem habe ich es mir anders überlegt.)

Python wurde verwirrt darüber, ob ich project/settings.py oder project/settings/__init__.py importieren wollte. Ich entfernte das Verzeichnis settings und alles funktioniert jetzt einwandfrei.

0
Brendan Quinn

Mein Mac OS mochte es nicht, dass die in der Einstellungsdatei festgelegte env-Variable nicht gefunden wurde:

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('MY_SERVER_ENV_VAR_NAME')

nach dem Hinzufügen der env var zu meiner lokalen Mac OS-Entwicklungsumgebung verschwand der Fehler:

export MY_SERVER_ENV_VAR_NAME ='fake dev security key that is longer than 50 characters.'

In meinem Fall musste ich auch den Parameter --settings hinzufügen:

python3 manage.py check --deploy --settings myappname.settings.production

dabei ist production.py eine Datei, die produktionsspezifische Einstellungen in einem Einstellungsordner enthält.

0
Samer s Salib

Das Problem für mich war, get_text_noop in den iterablen SPRACHEN aufzurufen.

Ändern

LANGUAGES = (
    ('en-gb', get_text_noop('British English')),
    ('fr', get_text_noop('French')),
)

zu

from Django.utils.translation import gettext_lazy as _

LANGUAGES = (
    ('en-gb', _('British English')),
    ('fr', _('French')),
)

in der Basiseinstellungsdatei wurde die ImproperlyConfigured: The SECRET_KEY setting must not be empty-Ausnahme behoben.

0
Sepia

In meinem Fall war das Problem - ich hatte meinen app_folder und settings.py darin. Dann entschied ich mich, Settings folder in app_folder zu machen - und das machte eine Kollision mit settings.py. Umbenannt in Settings folder - und alles hat funktioniert.

0
Chiefir