Wenn Sie andere als SQLite mit Django verwenden, sind DB-Verbindungsinformationen in settings.py enthalten. Seien Sie also vorsichtig, wenn Sie sie mit Github verwalten. Da sich das Verbindungsziel je nach Entwicklungsumgebung ändert, ist es außerdem schwierig, settings.py für jedes Verbindungsziel zu erstellen. Alle Dateien müssen aktualisiert werden, wenn eine andere Änderung als das Verbindungsziel vorliegt.
Nach vielen Recherchen fand ich eine Bibliothek namens "django-environ". Einstellungen wie das DB-Verbindungsziel können beim Starten von Django in Systemumgebungsvariablen gespeichert werden, und die Systemumgebungsvariablen, die beim Laden von settings.py gespeichert werden, können in Feldern wie ALLOWED_HOSTS festgelegt werden. Es handelt sich um eine Bibliothek, die erstellt wurde, um die Verwaltung von settings.py zu vereinfachen. Offizielle Seite ist ebenfalls gut, aber die folgende Seite war sehr einfach zu verstehen, daher werde ich das Verfahren zur Einführung von "django-environ" zusammenfassen.
Zitat: Versuchen Sie, Umgebungsvariablen mit django-environ zu verwalten
Installieren Sie einfach die Bibliothek django-environ
mit pip
.
pip install django-environ
Erstellen Sie eine Umgebungsvariablen-Definitionsdatei. Nennen Sie die Datei ".env" und erstellen Sie sie im selben Verzeichnis ** wie ** manage.py. Der Grund für die Erstellung im selben Verzeichnis wie manage.py wird später in Schritt 3 beschrieben.
djnago project
├── manage.py
├── .env
└── xxxx
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
Definieren Sie in der ENV-Datei systemspezifische Informationen wie ALLOWED_HOSTS und DATABASES, die in settings.py im Format key = value definiert sind. Wenn Sie eine andere Datenbank als SQLite verwenden, müssen Sie in DATABASES einen Benutzernamen und ein Kennwort festlegen. Wenn Sie diese jedoch in DATABASE_URL schreiben, können Sie sie in eine Zeile schreiben. Wenn Sie mehrere Hostnamen in ALLOWED_HOSTS definieren, trennen Sie diese durch Kommas. Im Folgenden werden die Elemente definiert, die zum Wechseln zwischen der Entwicklungsumgebung und der Produktionsumgebung erforderlich sind.
.env
SECRET_KEY=aiueo
DEBUG=True
ALLOWED_HOSTS=
DATABASE_URL=mysql://USER:PASSWORD@HOST:PORT/NAME
Die Beschreibungsmethode von DATABASE_URL in jeder Datenbank lautet wie folgt.
Engine | Django Backend | URL |
---|---|---|
PostgreSQL | django.db.backends.postgresql_psycopg2 | postgres://USER:PASSWORD@HOST:PORT/NAME |
PostGIS | django.contrib.gis.db.backends.postgis | postgis://USER:PASSWORD@HOST:PORT/NAME |
MSSQL | sql_server.pyodbc | mssql://USER:PASSWORD@HOST:PORT/NAME |
MySQL | django.db.backends.mysql | mysql://USER:PASSWORD@HOST:PORT/NAME |
MySQL (GIS) | django.contrib.gis.db.backends.mysql | mysqlgis://USER:PASSWORD@HOST:PORT/NAME |
SQLite | django.db.backends.sqlite3 | sqlite:///PATH |
SpatiaLite | django.contrib.gis.db.backends.spatialite | spatialite:///PATH |
Oracle | django.db.backends.oracle | oracle://USER:PASSWORD@HOST:PORT/NAME |
Oracle (GIS) | django.contrib.gis.db.backends.oracle | oraclegis://USER:PASSWORD@HOST:PORT/NAME |
Redshift | django_redshift_backend | redshift://USER:PASSWORD@HOST:PORT/NAME |
Lesen Sie die Einstellungsinformationen der ENV-Datei mit settings.py. Unten wird die .env-Datei in BASE_DIR gelesen. Wenn Sie die .env-Datei in einem anderen Verzeichnis als manage.py ablegen, müssen Sie das Verzeichnis angeben.
settings.py
import environ
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
env = environ.Env(DEBUG=(bool,True))
env.read_env(os.path.join(BASE_DIR,'.env'))
Sie müssen lediglich den Schlüsselnamen angeben, den Sie erhalten möchten, und die Einstellungen in der ENV-Datei abrufen. Der eingestellte Wert wird in der Env-Klasse gespeichert und kann in einem Wörterbuchtyp referenziert werden. Beachten Sie, dass ein KeyError auftritt, wenn Sie einen Schlüssel angeben, der nicht vorhanden ist. Dieser Bereich hat die gleichen Spezifikationen wie "os.environ".
Sie können es auch mit einer Funktion namens "get_value" erhalten. Mit get_value
tritt KeyError auch dann nicht auf, wenn der Schlüssel nicht vorhanden ist, und der Rückgabewert kann als Argument angegeben werden. Sie können auch den Rückgabetyp angeben.
Env.get_value(var, cast=None, default=NOTSET, parse_default=False) -> float
ALLOWED_HOSTS verwendet eine Funktion, die einen Listentyp zurückgibt, wenn mehrere Hostnamen definiert sind.
In DATABASES'default 'wurden der Benutzername und das Kennwort für die Verbindung zur Datenbank individuell definiert. Wenn Sie jedoch die Funktion .db ()
verwenden, wird der Inhalt von DATABASE_URL in einen Listentyp konvertiert, der von'default' gelesen werden kann. Es ist sehr praktisch, weil es tut.
settings.py
SECRET_KEY = env.get_value('SECRET_KEY',str)
DEBUG = env.get_value('DEBUG', bool)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
SESSION_COOKIE_AGE = env.get_value('SESSION_COOKIE_AGE', int) #Gültigkeitsdauer der Sitzung (Sekunden)
DATABASES = {
'default':env.db(),
}
Recommended Posts