Wie werden Einstellungen für die lokale Entwicklung und den Produktionsserver empfohlen? Einige von ihnen (wie Konstanten usw.) können in beiden geändert / aufgerufen werden, aber einige von ihnen (wie Pfade zu statischen Dateien) müssen unterschiedlich bleiben und sollten daher nicht jedes Mal überschrieben werden, wenn der neue Code bereitgestellt wird.
Derzeit füge ich alle Konstanten hinzu settings.py
. Aber jedes Mal, wenn ich eine Konstante lokal ändere, muss ich sie auf den Produktionsserver kopieren und die Datei für produktionsspezifische Änderungen bearbeiten ... :(
Bearbeiten: Anscheinend gibt es keine Standardantwort auf diese Frage. Ich habe die beliebteste Methode akzeptiert.
python
django
deployment
akv
quelle
quelle
Antworten:
In
settings.py
:Sie können überschreiben, was in benötigt wird
local_settings.py
. es sollte dann außerhalb Ihrer Versionskontrolle bleiben. Aber da Sie das Kopieren erwähnen, verwenden Sie vermutlich keine;)quelle
settings_local
im Gegensatz zulocal_settings
gruppieren sie mitsettings.py
in alphabetischen Ordnerlisten. Halten Siesettings_local.py
sich von der Versionskontrolle fern,.gitignore
da Anmeldeinformationen nicht zu Git gehören. Stellen Sie sich vor, Sie beziehen sie versehentlich aus offenen Quellen. Ich haltesettings_local.py.txt
stattdessen eine Vorlagendatei namens git .Zwei Scoops von Django: Best Practices für Django 1.5 empfiehlt, die Versionskontrolle für Ihre Einstellungsdateien zu verwenden und die Dateien in einem separaten Verzeichnis zu speichern:
Die
base.py
Datei enthält allgemeine Einstellungen (wie MEDIA_ROOT oder ADMIN)local.py
und verfügtproduction.py
über ortsspezifische Einstellungen:In der Basisdatei
settings/base.py
:In der lokalen Entwicklungseinstellungsdatei
settings/local.py
:In der Datei mit den Einstellungen für die Dateiproduktion
settings/production.py
:Wenn Sie dann Django ausführen, fügen Sie die
--settings
Option hinzu:Die Autoren des Buches haben auch eine Beispielvorlage für das Projektlayout auf Github erstellt.
quelle
--settings
Sie dieDJANGO_SETTINGS_MODULE
Envvar nicht jedes Mal verwenden, sondern festlegen können. Dies funktioniert gut mit z. B. Heroku: Stellen Sie es global auf Produktion ein und überschreiben Sie es dann mit dev in Ihrer .env-Datei.DJANGO_SETTINGS_MODULE
env var ist hier die beste Idee, danke Simon.BASE_DIR
Einstellungen aufos.path.dirname(os.path.realpath(os.path.dirname(__file__) + "/.."))
from django.conf import settings
ein Objekt, das die Schnittstelle abstrahiert und den Code vom Speicherort der Einstellungen entkoppelt. docs.djangoproject.com/de/dev/topics/settings/…settings.py
Verwenden Sie stattdessen dieses Layout:common.py
Hier lebt der größte Teil Ihrer Konfiguration.prod.py
importiert alles von common und überschreibt alles, was zum Überschreiben benötigt wird:In ähnlicher Weise wird
dev.py
alles importiert und allescommon.py
überschrieben, was zum Überschreiben benötigt wird.Schließlich
__init__.py
entscheiden Sie, welche Einstellungen geladen werden sollen, und wo Sie Geheimnisse speichern (daher sollte diese Datei nicht versioniert werden):Was mir an dieser Lösung gefällt, ist:
common.py
.prod.py
rein, dev-spezifische Dinge gehen reindev.py
. Es ist einfach.common.py
inprod.py
oderdev.py
überschreiben, und Sie können alles von in überschreiben__init__.py
.quelle
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "foobar.settings")
foobar ein Ordner mit einer__init__.py
Datei, und settings ist ein Ordner mit einer__init__.py
Datei, die meine Geheimnisse enthält und dev.py importiert, die dann common.py importiert. EDIT Nevermind, ich hatte kein Modul installiert, das benötigt wurde. Mein Fehler! Das funktioniert super !!Ich verwende eine leicht modifizierte Version der Einstellungen von "if DEBUG", die Harper Shelby veröffentlicht hat. Abhängig von der Umgebung (win / linux / etc.) Muss der Code möglicherweise etwas angepasst werden.
Ich habe in der Vergangenheit das "if DEBUG" verwendet, aber ich stellte fest, dass ich gelegentlich Tests mit DEUBG durchführen musste, das auf False gesetzt war. Was ich wirklich unterscheiden wollte, wenn die Umgebung Produktion oder Entwicklung war, gab mir die Freiheit, das DEBUG-Level zu wählen.
Ich würde diese Art der Einstellung immer noch als in Arbeit betrachten. Ich habe keine Möglichkeit gesehen, mit Django-Einstellungen umzugehen, die alle Grundlagen abdeckten, und war gleichzeitig kein totaler Aufwand beim Einrichten (ich bin mit den Methoden der 5x-Einstellungsdateien nicht fertig).
quelle
os.environ['COMPUTERNAME']
funktioniert leider nicht auf PythonAnywhere. Sie erhalten einen KeyError.Ich benutze eine settings_local.py und eine settings_production.py. Nachdem ich mehrere Optionen ausprobiert hatte, stellte ich fest, dass es einfach und schnell ist, Zeit mit komplexen Lösungen zu verschwenden, wenn sich einfach zwei Einstellungsdateien befinden.
Wenn Sie mod_python / mod_wsgi für Ihr Django-Projekt verwenden, müssen Sie es auf Ihre Einstellungsdatei verweisen. Wenn Sie auf Ihrem lokalen Server auf app / settings_local.py und auf Ihrem Produktionsserver auf app / settings_production.py verweisen, wird das Leben einfacher. Bearbeiten Sie einfach die entsprechende Einstellungsdatei und starten Sie den Server neu (der Django-Entwicklungsserver wird automatisch neu gestartet).
quelle
python manage.py runserver
) mitzuteilen , welche Einstellungsdatei verwendet werden soll?TL; DR: Der Trick ist , zu ändern ,
os.environment
bevor Sie importierensettings/base.py
in jedemsettings/<purpose>.py
dieser stark die Dinge vereinfachen wird.Wenn ich nur an all diese ineinander verschlungenen Dateien denke, bekomme ich Kopfschmerzen. Kombinieren, Importieren (manchmal bedingt), Überschreiben, Patchen von dem, was bereits festgelegt wurde, falls sich die
DEBUG
Einstellung später ändert. Was ein Alptraum!Im Laufe der Jahre habe ich alle verschiedenen Lösungen durchlaufen. Sie funktionieren alle etwas , sind aber so schmerzhaft zu handhaben. WTF! Brauchen wir wirklich all diesen Ärger? Wir haben mit nur einer
settings.py
Datei begonnen. Jetzt brauchen wir eine Dokumentation, um all dies in der richtigen Reihenfolge richtig zu kombinieren!Ich hoffe, dass ich mit der folgenden Lösung endlich den (meinen) Sweet Spot erreicht habe.
Lassen Sie uns die Ziele zusammenfassen (einige häufig, andere meine)
Geheimnisse geheim halten - nicht in einem Repo aufbewahren!
Festlegen / Lesen von Schlüsseln und Geheimnissen über Umgebungseinstellungen im 12-Faktor-Stil .
Haben Sie vernünftige Fallback-Standardeinstellungen. Ideal für die lokale Entwicklung benötigen Sie neben den Standardeinstellungen nichts mehr.
… Aber versuchen Sie, die Standardeinstellung der Produktion sicher zu halten. Es ist besser, eine lokale Überschreibung von Einstellungen zu verpassen, als daran zu denken, die Standardeinstellungen sicher für die Produktion anzupassen.
Sie können
DEBUG
auf eine Weise ein- und ausschalten, die sich auf andere Einstellungen auswirken kann (z. B. komprimiertes oder nicht komprimiertes Javascript).Das Umschalten zwischen Zweckeinstellungen wie lokal / Testen / Staging / Produktion sollte nur auf
DJANGO_SETTINGS_MODULE
, nicht mehr basieren .… Aber erlauben Sie eine weitere Parametrierung durch Umgebungseinstellungen wie
DATABASE_URL
.… Erlauben ihnen auch, verschiedene Zweckeinstellungen zu verwenden und sie lokal nebeneinander auszuführen, z. Produktions-Setup auf einem lokalen Entwicklercomputer, um auf die Produktionsdatenbank zuzugreifen oder komprimierte Stylesheets zu rauchen.
Fehler, wenn eine Umgebungsvariable nicht explizit festgelegt ist (mindestens ein leerer Wert erforderlich), insbesondere in der Produktion, z.
EMAIL_HOST_PASSWORD
.Reagieren
DJANGO_SETTINGS_MODULE
Sie während des Startprojekts von django-admin auf die in manage.py festgelegte StandardeinstellungHalten Sie die Bedingungen auf ein Minimum. Wenn es sich bei der Bedingung um den beabsichtigten Umgebungstyp handelt (z. B. für die Produktionssatz-Protokolldatei und deren Drehung), überschreiben Sie die Einstellungen in der zugehörigen beabsichtigten Einstellungsdatei.
Nicht
Lassen Sie django nicht die Einstellung DJANGO_SETTINGS_MODULE aus einer Datei lesen.
Pfui! Überlegen Sie, wie meta das ist. Wenn Sie eine Datei (wie Docker Env) benötigen, lesen Sie diese in die Umgebung, bevor Sie einen Django-Prozess starten.
Überschreiben Sie DJANGO_SETTINGS_MODULE nicht in Ihrem Projekt- / App-Code, z. basierend auf Hostname oder Prozessname.
Wenn Sie faul sind, Umgebungsvariablen (wie für
setup.py test
) festzulegen, tun Sie dies in Tools, bevor Sie Ihren Projektcode ausführen.Vermeiden Sie Magie und Patches, wie Django seine Einstellungen liest, verarbeiten Sie die Einstellungen vor, aber stören Sie sie danach nicht.
Kein komplizierter logischer Unsinn. Die Konfiguration sollte festgelegt und materialisiert werden und nicht im laufenden Betrieb berechnet werden. Das Bereitstellen von Fallback-Standardeinstellungen ist hier gerade genug Logik.
Möchten Sie wirklich debuggen, warum haben Sie lokal die richtigen Einstellungen, aber in der Produktion auf einem Remote-Server, auf einem von hundert Computern, etwas anders berechnet? Oh! Unit Tests? Für Einstellungen? Ernsthaft?
Lösung
Meine Strategie besteht aus einer exzellenten Django-Umgebung, die mit
ini
Stildateien verwendet wird undos.environment
Standardeinstellungen für die lokale Entwicklung bietet, sowie einigen minimalen und kurzensettings/<purpose>.py
Dateien, die einimport settings/base.py
AFTER the haben,os.environment
das aus einerINI
Datei festgelegt wurde. Dies gibt uns effektiv eine Art Einspritzung.Der Trick hier besteht darin,
os.environment
vor dem Import zu ändernsettings/base.py
.Das vollständige Beispiel finden Sie im Repo: https://github.com/wooyek/django-settings-strategy
Einstellungen / .env
Ein Standard für die lokale Entwicklung. Eine geheime Datei, um meistens die erforderlichen Umgebungsvariablen festzulegen. Setzen Sie sie auf leere Werte, wenn sie in der lokalen Entwicklung nicht benötigt werden. Wir geben hier
settings/base.py
Standardeinstellungen an und versagen auf keinem anderen Computer, wenn diese in der Umgebung fehlen.settings / local.py
Was hier passiert, ist das Laden der Umgebung von
settings/.env
und das Importieren allgemeiner Einstellungen vonsettings/base.py
. Danach können wir einige überschreiben, um die lokale Entwicklung zu erleichtern.settings / Production.py
Für die Produktion sollten wir keine Umgebungsdatei erwarten, aber es ist einfacher, eine zu haben, wenn wir etwas testen. Trotzdem werden nicht wenige Standardeinstellungen inline bereitgestellt, sodass
settings/base.py
entsprechend reagiert werden kann.Das Hauptinteresse hierbei ist
DEBUG
undASSETS_DEBUG
überschreibt, sie werdenos.environ
NUR auf die Python angewendet, wenn sie aus der Umgebung und der Datei fehlen.Dies sind unsere Produktionsstandards, die nicht in die Umgebung oder Datei gestellt werden müssen, aber bei Bedarf überschrieben werden können. Ordentlich!
settings / base.py
Dies sind Ihre meist Vanille-Django-Einstellungen, mit ein paar Bedingungen und viel Lesen aus der Umgebung. Fast alles ist hier drin, um alle beabsichtigten Umgebungen konsistent und so ähnlich wie möglich zu halten.
Die Hauptunterschiede sind unten (ich hoffe, diese sind selbsterklärend):
Das letzte Bit zeigt die Kraft hier.
ASSETS_DEBUG
hat eine sinnvolle Standardeinstellung, die in überschrieben werden kannsettings/production.py
und die sogar durch eine Umgebungseinstellung überschrieben werden kann! Yay!Tatsächlich haben wir eine gemischte Hierarchie von Bedeutung:
quelle
Ich verwalte meine Konfigurationen mit Hilfe von Django-Split-Einstellungen .
Es ist ein Drop-In-Ersatz für die Standardeinstellungen. Es ist einfach und doch konfigurierbar. Ein Refactoring Ihrer vorhandenen Einstellungen ist nicht erforderlich.
Hier ist ein kleines Beispiel (Datei
example/settings/__init__.py
):Das ist es.
Aktualisieren
Ich habe einen Blog-Beitrag über das Verwalten
django
der Einstellungen mit geschriebendjango-split-sttings
. Guck mal!quelle
uwsgi.ini
Datei hat unterschiedliche Einstellungen in dev / prod. Haben Sie eine Idee, wie Sie Werte aus meiner Einstellungsdatei auswählen können?Das Problem bei den meisten dieser Lösungen besteht darin, dass Sie entweder Ihre lokalen Einstellungen vor oder nach den allgemeinen Einstellungen angewendet haben.
Es ist also unmöglich, Dinge wie zu überschreiben
gleichzeitig.
Eine Lösung kann mithilfe von Konfigurationsdateien im "ini" -Stil mit der ConfigParser-Klasse implementiert werden. Es unterstützt mehrere Dateien, Lazy String Interpolation, Standardwerte und viele andere Extras. Sobald eine Reihe von Dateien geladen wurden, können weitere Dateien geladen werden, und ihre Werte überschreiben gegebenenfalls die vorherigen.
Sie laden eine oder mehrere Konfigurationsdateien, abhängig von der Computeradresse, den Umgebungsvariablen und sogar den Werten in zuvor geladenen Konfigurationsdateien. Dann verwenden Sie einfach die analysierten Werte, um die Einstellungen zu füllen.
Eine Strategie, die ich erfolgreich angewendet habe, war:
defaults.ini
Standarddateinet.ini
, dannnet.domain.ini
, dannnet.domain.webserver01.ini
, die jeweils möglicherweise Werte der vorherigen überschrieben). Dieses Konto gilt auch für Entwicklercomputer, sodass jeder seinen bevorzugten Datenbanktreiber usw. für die lokale Entwicklung einrichten kanncluster.cluster_name.ini
, um beispielsweise Datenbank- und Cache-IPs zu definierenAls Beispiel für etwas, das Sie damit erreichen können, können Sie einen "Subdomain" -Wert pro Umgebung
hostname: %(subdomain).whatever.net
definieren , der dann in den Standardeinstellungen (as ) verwendet wird, um alle erforderlichen Hostnamen und Cookies zu definieren, die Django benötigt, um zu funktionieren.Dies ist so trocken, wie ich es bekommen konnte. Die meisten (vorhandenen) Dateien hatten nur 3 oder 4 Einstellungen. Darüber hinaus musste ich die Kundenkonfiguration verwalten, sodass ein zusätzlicher Satz von Konfigurationsdateien (mit Dingen wie Datenbanknamen, Benutzern und Kennwörtern, zugewiesenen Subdomänen usw.) vorhanden war, einer oder mehrere pro Kunde.
Sie können dies so niedrig oder so hoch wie nötig skalieren. Sie geben einfach die Schlüssel in die Konfigurationsdatei ein, die Sie pro Umgebung konfigurieren möchten. Wenn eine neue Konfiguration erforderlich ist, setzen Sie den vorherigen Wert in die Standardkonfiguration und überschreiben Sie ihn wo nötig.
Dieses System hat sich als zuverlässig erwiesen und funktioniert gut mit der Versionskontrolle. Es wird seit langem verwendet, um zwei separate Anwendungscluster (15 oder mehr separate Instanzen der Django-Site pro Computer) mit mehr als 50 Kunden zu verwalten, bei denen die Größe und die Mitglieder der Cluster je nach Stimmung des Systemadministrators ihre Größe und Mitglieder wechselten. .
quelle
config = ConfigParser.ConfigParser()
dann Ihre Dateien lesenconfig.read(array_of_filenames)
und Werte mit abrufenconfig.get(section, option)
. Zuerst laden Sie Ihre Konfiguration und dann lesen Sie damit die Werte für die Einstellungen.Ich arbeite auch mit Laravel und ich mag die Implementierung dort. Ich habe versucht, es nachzuahmen und mit der von T. Stone vorgeschlagenen Lösung zu kombinieren (siehe oben):
Vielleicht würde dir so etwas helfen.
quelle
Denken Sie daran, dass settings.py eine Live-Codedatei ist. Angenommen, Sie haben DEBUG nicht für die Produktion eingestellt (was eine bewährte Methode ist), können Sie Folgendes tun:
Ziemlich einfach, aber theoretisch können Sie jede Komplexität erreichen, die nur auf dem Wert von DEBUG basiert - oder auf jeder anderen Variablen- oder Codeprüfung, die Sie verwenden möchten.
quelle
Für die meisten meiner Projekte verwende ich folgendes Muster:
from settings_base import *
)(Um manage.py mit einer benutzerdefinierten Einstellungsdatei auszuführen, verwenden Sie einfach die Befehlsoption --settings:
manage.py <command> --settings=settings_you_wish_to_use.py
)quelle
Meine Lösung für dieses Problem ist auch eine Mischung aus einigen hier bereits genannten Lösungen:
local_settings.py
, die den InhaltUSING_LOCAL = True
in dev undUSING_LOCAL = False
in prod enthältsettings.py
Ich importiere diese Datei, um dieUSING_LOCAL
Einstellung zu erhaltenIch stütze dann alle meine umgebungsabhängigen Einstellungen auf diese:
Ich ziehe es vor, zwei separate settings.py-Dateien zu haben, die ich pflegen muss, da ich meine Einstellungen einfacher in einer einzigen Datei strukturieren kann, als sie auf mehrere Dateien zu verteilen. Wenn ich eine Einstellung aktualisiere, vergesse ich nicht, dies für beide Umgebungen zu tun.
Natürlich hat jede Methode ihre Nachteile und diese ist keine Ausnahme. Das Problem hierbei ist, dass ich die
local_settings.py
Datei nicht überschreiben kann, wenn ich meine Änderungen in die Produktion übertrage, was bedeutet, dass ich nicht einfach alle Dateien blind kopieren kann, aber damit kann ich leben.quelle
Ich benutze eine Variation von jpartogi, die ich etwas kürzer finde:
Grundsätzlich habe ich auf jedem Computer (Entwicklung oder Produktion) die entsprechende Datei hostname_settings.py, die dynamisch geladen wird.
quelle
Es gibt auch Django Classy Settings. Ich persönlich bin ein großer Fan davon. Es wurde von einer der aktivsten Personen im Django IRC gebaut. Sie würden Umgebungsvariablen verwenden, um Dinge festzulegen.
http://django-classy-settings.readthedocs.io/en/latest/
quelle
1 - Erstellen Sie einen neuen Ordner in Ihrer App und benennen Sie ihn.
2 - Erstellen Sie nun eine neue
__init__.py
Datei und schreiben Sie hinein3 - Erstellen Sie drei neue Dateien im Namen des Einstellungsordners
local.py
undproduction.py
undbase.py
.4 -
base.py
Kopieren Sie den gesamten Inhalt des vorherigensettings.py
Ordners und benennen Sie ihn beispielsweise in etwas anderes umold_settings.py
.5 - Ändern Sie in base.py Ihren BASE_DIR-Pfad so, dass er auf Ihren neuen Einstellungspfad verweist
Alter Pfad->
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
Neuer Weg ->
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
Auf diese Weise kann das Projektverzeichnis strukturiert und zwischen Produktion und lokaler Entwicklung verwaltet werden.
quelle
settings
Erstellen Sie unterschiedliche Einstellungsdateien, um unterschiedliche Konfigurationen in unterschiedlichen Umgebungen zu verwenden . Starten Sie in Ihrem Bereitstellungsskript den Server mithilfe von--settings=<my-settings.py>
Parametern, über die Sie unterschiedliche Einstellungen in unterschiedlichen Umgebungen verwenden können.Vorteile dieses Ansatzes :
Ihre Einstellungen sind je nach Umgebung modular
Sie können die
master_settings.py
Konfiguration mit der Basiskonfiguration in die importierenenvironmnet_configuration.py
und die Werte überschreiben, die Sie in dieser Umgebung ändern möchten.Wenn Sie ein großes Team haben, kann jeder Entwickler sein eigenes haben,
local_settings.py
das er dem Code-Repository hinzufügen kann, ohne dass das Risiko besteht, die Serverkonfiguration zu ändern. Sie können diese lokalen Einstellungen hinzufügen ,.gitnore
wenn Sie verwenden git oder.hginore
wenn Sie Mercurial für Versionskontrolle (oder irgendeine andere). Auf diese Weise sind lokale Einstellungen nicht einmal Teil der eigentlichen Codebasis, um sie sauber zu halten.quelle
Ich hatte meine Einstellungen wie folgt aufgeteilt
Wir haben 3 Umgebungen
Jetzt sollten Inszenierung und Produktion offensichtlich die maximal mögliche ähnliche Umgebung haben. Also haben wir gehalten
prod.py
für beide gehalten.Aber es gab einen Fall, in dem ich feststellen musste, dass der laufende Server ein Produktionsserver ist. @T. Stones Antwort half mir, den Scheck wie folgt zu schreiben.
quelle
Ich differenziere es in manage.py und habe zwei separate Einstellungsdateien erstellt: local_settings.py und prod_settings.py.
In manage.py überprüfe ich, ob der Server ein lokaler Server oder ein Produktionsserver ist. Wenn es sich um einen lokalen Server handelt, wird local_settings.py geladen, und wenn es sich um einen Produktionsserver handelt, wird prod_settings.py geladen. Im Grunde würde es so aussehen:
Ich fand es einfacher, die Einstellungsdatei in zwei separate Dateien zu trennen, als viele ifs in der Einstellungsdatei durchzuführen.
quelle
Als Alternative zum Verwalten einer anderen Datei, wenn Sie möchten: Wenn Sie git oder ein anderes VCS verwenden, um Codes von lokal auf den Server zu übertragen, können Sie die Einstellungsdatei zu .gitignore hinzufügen.
Auf diese Weise können Sie problemlos an beiden Stellen unterschiedliche Inhalte haben. Auf dem Server können Sie also eine unabhängige Version von settings.py konfigurieren. Änderungen, die am lokalen Server vorgenommen werden, wirken sich nicht auf den Server aus und umgekehrt.
Außerdem wird die Datei settings.py von github entfernt, der große Fehler, den ich bei vielen Neulingen gesehen habe.
quelle
Das Erstellen mehrerer Versionen von settings.py ist ein Anti-Pattern für die 12-Faktor-App-Methodik . Verwenden Sie stattdessen Python- Decouple oder Django-Environ .
quelle
Ich denke, die beste Lösung wird von @T vorgeschlagen. Stone, aber ich weiß nicht, warum ich in Django nicht die DEBUG-Flagge benutze. Ich schreibe den folgenden Code für meine Website:
Immer sind die einfachen Lösungen besser als die komplexen.
quelle
Ich fand die Antworten hier sehr hilfreich. (Wurde dies endgültiger gelöst? Die letzte Antwort war vor einem Jahr.) Nachdem ich alle aufgeführten Ansätze berücksichtigt hatte, fand ich eine Lösung, die ich hier nicht aufgelistet sah.
Meine Kriterien waren:
Ich dachte, das Einschalten des Host-Computers wäre sinnvoll, aber dann stellte ich fest, dass das eigentliche Problem hier unterschiedliche Einstellungen für unterschiedliche Umgebungen sind , und hatte einen Aha-Moment. Ich habe diesen Code am Ende meiner Datei settings.py eingefügt:
Auf diese Weise verwendet die App standardmäßig die Produktionseinstellungen. Dies bedeutet, dass Sie Ihre Entwicklungsumgebung explizit auf die Whitelist setzen. Es ist viel sicherer zu vergessen, die Umgebungsvariable lokal festzulegen, als wenn es umgekehrt wäre und Sie vergessen haben, etwas in der Produktion festzulegen und einige Entwicklungseinstellungen verwenden zu lassen.
Bei der lokalen Entwicklung entweder über die Shell oder in einem .bash_profile oder wo auch immer:
(Oder wenn Sie unter Windows entwickeln, legen Sie dies über die Systemsteuerung oder wie auch immer es heutzutage heißt ... Windows hat es immer so dunkel gemacht, dass Sie Umgebungsvariablen festlegen können.)
Bei diesem Ansatz befinden sich die Entwicklungseinstellungen alle an einem (Standard-) Ort und überschreiben bei Bedarf einfach die Produktionseinstellungen. Jegliches Herumspielen mit Entwicklungseinstellungen sollte absolut sicher sein, sich der Quellcodeverwaltung zu widmen, ohne die Produktion zu beeinträchtigen.
quelle