Django: Unsachgemäß konfiguriert: Die Einstellung SECRET_KEY darf nicht leer sein


99

Ich versuche, mehrere Einstellungsdateien (Entwicklung, Produktion usw.) einzurichten, die einige Grundeinstellungen enthalten. Kann aber nicht gelingen. Wenn ich versuche zu laufen, erhalte ./manage.py runserverich die folgende Fehlermeldung:

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

Hier ist mein Einstellungsmodul:

(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

Basiseinstellungen (enthalten 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'

Eine der Einstellungsdateien:

(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',
)

Code in 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)

Wenn ich hinzufügen from base import *in /srv/www/cb/cb/settings/__init__.py(was sonst leer ist ), beginnt es auf magische Weise zu arbeiten , aber ich verstehe nicht , warum. Kann mir jemand erklären, was hier los ist? Es muss etwas Python-Modul-Magie sein.

BEARBEITEN: Alles beginnt auch zu funktionieren, wenn ich diese Zeile aus base.py entferne

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

Wenn ich diese Zeile aus web.templatetags.cb_tags entferne, funktioniert sie auch:

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 schafft es einige seltsame kreisförmige Sachen und Spiel vorbei.


Genau, am Ende werden Sie immer Einstellungen benötigen, auch wenn es von django.conf
Guilherme David da Costa

2
Versuchen Sie, Ihr DJANGO_SETTINGS_MODULE in settings.development zu ändern
Guilherme David da Costa

Jeder, der virutalenvwrapper verwendet, versucht die Antwort von crimeminister
lukeaus

Antworten:


105

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


4
Ja, ich denke, die Zirkularität macht es.
Klima

5
Refactor zur Vermeidung von zirkulären Abhängigkeiten. Die genaue Lösung ist wirklich ziemlich spezifisch für Ihren eigenen Code.
Sam Svenbjorgchristiensensen

6
Tipp: Um festzustellen, was das Problem verursacht, fügen Sie z. B. eine zufällige Druckanweisung in die Einstellungsdatei ein und verschieben Sie sie, um zu sehen, wo sie beschädigt wird.
Felix Böhme

14
Ich habe damit keine Antwort gefunden.
Avinash Raj

8
Diese Antwort wäre nützlicher, wenn sie spezifischer wäre ... sie besagt, dass das Problem "etwas" ist.
Hack-R

74

Nach der Umstrukturierung der Einstellungen gemäß den Anweisungen aus Daniel Greenfields Buch Two scoops of Django stieß ich auf dasselbe Problem .

Ich habe das Problem durch Einstellen behoben

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

in manage.pyund wsgi.py.

Aktualisieren:

In der obigen Lösung localbefindet sich der Dateiname (settings / local.py) in meinem Einstellungsordner, der die Einstellungen für meine lokale Umgebung enthält.

Eine andere Möglichkeit, dieses Problem zu beheben, besteht darin, alle allgemeinen Einstellungen in settings / base.py beizubehalten und anschließend drei separate Einstellungsdateien für Ihre Produktions-, Staging- und Entwicklungsumgebungen zu erstellen.

Ihr Einstellungsordner sieht folgendermaßen aus:

settings/
    __init__.py
    base.py
    local.py
    prod.py
    stage.py

und behalten Sie den folgenden Code in Ihrem settings/__init__.py

from .base import *

env_name = os.getenv('ENV_NAME', 'local')

if env_name == 'prod':
    from .prod import *
elif env_name == 'stage':
    from .stage import *
else:
    from .local import *

Für alle, die Wagtail auf PythonAnywhere verwenden, fügen Sie einfach die '.dev' hinzu. Am Ende dieser Zeile in WSGI ... os.environ ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings.dev' müssen Sie später eine local.py außerhalb Ihres Quell-Repos für Ihre Passwörter usw. erstellen
Inyoka

Sollte die beste Antwort sein
Dev

ImportError: Kein Modul mit dem Namen local
Tessaracter

@Tessaracter verwendet den Namen der Einstellungsdatei, die Sie anstelle von verwenden local. In meinem Fall wurden die lokalen Einstellungen in der Datei settings / local.py
Jinesh

1
Dies verstößt gegen die Django-Konventionen und ersetzt die ordnungsgemäß dokumentierte DJANGO_SETTINGS_MODULEdurch eine neue benutzerdefinierte Umgebungsvariable, die nicht sofort unterstützt wird und manuell behandelt werden muss. Ich bin überrascht, dass dies so viele positive Stimmen hat. Ich arbeite an einem Projekt mit diesem Setup und wir stoßen auf viele Probleme, von Schwierigkeiten bei der Konfiguration einer isolierten Umgebung für die lokale Entwicklung bis hin zum Ausfall externer Bibliotheken, weil sie erwarten, dass die DJANGO_SETTINGS_MODULEwie erwartet funktionieren und dies nicht.
Ariel

20

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

Für mich stellte sich heraus, dass es sich um eine veraltete 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 aus dem Nichts erhalten, dh ohne Änderungen vorzunehmen, die scheinbar mit den Django-Einstellungen zusammenhängen, könnte dies eine gute erste Maßnahme sein.


2
danke für diesen tipp. Ich hatte ein identisches Problem auf meinem Entwicklungsserver. Das Löschen aller .pyc-Dateien aus dem Projektordner hat den Trick getan. Ich habe die Datei settings.py kurz vor diesem Ereignis bearbeitet.
Krokodil

15

Entfernen Sie .pyc-Dateien

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

Ich habe den gleichen Fehler, als ich python manage.py runserver gemacht habe. Es war weil .pyc-Datei. Ich habe die .pyc-Datei aus dem Projektverzeichnis gelöscht, dann hat es funktioniert.


2
find . -type f -name *.pyc -deletewird tun
Srinivas Reddy Thatiparthy

7

Ich hatte die Einstellungsdatei nicht angegeben:

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

6

Es funktioniert, weil Sie auf der base.py alle erforderlichen Informationen in einer Grundeinstellungsdatei haben. Sie benötigen die Zeile:

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

So funktioniert es und wenn Sie dies tun from base import *, importiert es SECRET_KEY in Ihre development.py.

Sie sollten immer die Grundeinstellungen importieren, bevor Sie benutzerdefinierte Einstellungen vornehmen.


EDIT: Auch wenn django Importe Entwicklung von Ihrem Paket, es alle Variablen innerhalb Basis initialisiert , da Sie definiert im from base import *Inneren__init__.py


Entschuldigung, ich verstehe Ihren Standpunkt nicht. Es gab von Basisimport * in zu Beginn der Entwicklung.py und es hat nicht funktioniert.
Klima

Oh, tut mir leid, ich bin reingesprungen, egal was wirklich geschah. Django versucht immer noch, Einstellungen aus Einstellungen anstelle Ihrer development.py zu importieren, da dies der Grund für die Arbeit zu sein scheint, wenn Sie die Basis bei init .py importieren
Guilherme David da Costa

5

Ich denke, dass es der Umgebungsfehler ist , sollten Sie versuchen, Folgendes einzustellen:DJANGO_SETTINGS_MODULE='correctly_settings'


4

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


4

Schreiben Sie in die Init .py des Einstellungsverzeichnisses den richtigen Import wie:

from Project.settings.base import *

Sie müssen wsgi.py oder manage.py nicht ändern


Perfekt! Vielen Dank.
Mayur

2

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


2

Für alle Benutzer von PyCharm: Die grüne Schaltfläche "Ausgewählte Konfiguration ausführen" führt zu diesem Fehler, führt jedoch die folgenden Schritte aus:

py manage.py runserver 127.0.0.1:8000 --settings=app_name.settings.development

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


1

Ich wollte nur hinzufügen, dass ich diesen Fehler erhalten habe, als mein Datenbankname in meiner settings.pyDatei falsch geschrieben wurde, sodass die Datenbank nicht erstellt werden konnte.


1

Ich habe dieses Problem in 1.8.4 gelöst, indem ich die TEMPLATES-Einstellungen behoben habe, bei denen ein Tippfehler aufgetreten ist (das Entfernen von TEMPLATES ['debug'] hat das Problem behoben).

Gehen Sie die Einstellungen durch, die Sie kürzlich geändert haben, und stellen Sie sicher, dass alle Schlüssel buchstäblich sind.


1

Um eine weitere mögliche Lösung in den Mix zu werfen, hatte ich einen settingsOrdner sowie ein settings.pyin meinem Projektverzeichnis. (Ich habe von umgebungsbasierten Einstellungsdateien zu einer Datei zurückgeschaltet. Ich habe es seitdem überdacht.)

Python war verwirrt darüber, ob ich importieren wollte project/settings.pyoder project/settings/__init__.py. Ich habe das settingsVerzeichnis entfernt und jetzt funktioniert alles einwandfrei.


0

Ich habe dieses Problem gelöst, indem ich die Leerzeichen um Gleichheitszeichen ( =) in meiner .envDatei entfernt habe.


0

In meinem Fall war das Problem - ich hatte mein app_folderund settings.pydrin. Dann entschied ich mich zu machen Settings folderinnen app_folder- und dass eine Kollision gemacht mit settings.py. Einfach umbenannt Settings folder- und alles hat funktioniert.


0

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

# 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 --settingsParameter hinzufügen :

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

Dabei ist Production.py eine Datei mit produktionsspezifischen Einstellungen in einem Einstellungsordner.


0

Das Problem für mich war, get_text_noopdie iterierbaren 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 emptyAusnahme behoben .


0

Ich habe das obige Problem gelöst, indem ich die Zeile in meiner settings.py kommentiert habe

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

SECRET_KEYin meiner ~/.bashrcDatei deklariert (für Linux Ubuntu Benutzer)

Für Entwicklungszwecke auf meiner lokalen Maschine habe ich keine evironmnet-Variable verwendet

SECRET_KEY = '(i9b4aes#h1)m3h_8jh^duxrdh$4pu8-q5vkba2yf$ptd1lev_'

Die obige Zeile gab den Fehler nicht an


0

In meinem Fall habe ich beim Einrichten einer Github-Aktion nur vergessen, die env-Variablen zur yml-Datei hinzuzufügen:

jobs:
  build:
    env:
     VAR1: 1
     VAR2: 5

0

Der Grund, warum es so viele verschiedene Antworten gibt, ist, dass die Ausnahme wahrscheinlich nichts mit SECRET_KEY zu tun hat. Es ist wahrscheinlich eine frühere Ausnahme, die verschluckt wird. Aktivieren Sie das Debuggen mit DEBUG = True, um die tatsächliche Ausnahme anzuzeigen.


0

In meinem Fall stellte ich nach langer Suche fest, dass bei PyCharm in Ihren Django-Einstellungen (Einstellungen> Sprachen & Frameworks> Django) das Konfigurationsdateifeld undefiniert war. Sie sollten dieses Feld auf die Einstellungsdatei Ihres Projekts verweisen lassen. Anschließend müssen Sie die Run / Debug-Einstellungen öffnen und die Umgebungsvariable DJANGO_SETTINGS_MODULE = vorhandener Pfad entfernen.

Dies geschieht, weil das Django-Plugin in PyCharm die Konfiguration des Frameworks erzwingt. Es macht also keinen Sinn, os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'myapp.settings') zu konfigurieren.


0

Importieren Sie base.py __init__.py alleine. Stellen Sie sicher, dass Sie die gleiche Konfiguration nicht noch einmal wiederholen!.

Umgebungsvariable setzen SET DJANGO_DEVELOPMENT =dev

settings/
  __init__.py
  base.py
  local.py
  production.py

Im __init__.py

from .base import *
if os.environ.get('DJANGO_DEVELOPMENT')=='prod':
   from .production import *
else:
   from .local import *

In base.pykonfiguriert die globalen Konfigurationen. außer Datenbank. mögen

SECRET_KEY, ALLOWED_HOSTS,INSTALLED_APPS,MIDDLEWARE .. etc....

Im local.py

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'database',
    'USER': 'postgres',
    'PASSWORD': 'password',
    'HOST': 'localhost',
    'PORT': '5432',
}
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.