API Zugriff via IPython Shell - GeoMatDigital/django-geomat GitHub Wiki
In diesem Artikel geht es hauptsächlich darum wie man im Docker Environment unter Windows, simpel mit IPython auf die Django API zugreifen kann.
Zunächste sollte gesagt sein, dass sowohl der Django Container als auch der Datenbank-Container laufen müssen und keine Fehler produzieren
Möchte man nun beginnen mit der IPython Shell zu arbeiten, begibt man sich zunächst via cmd
-Prompt in das Arbeitsverzweichnis (z.B. C:\Users\<username>\django-geomat) und setzt mit folgendem Befehl die Umgebungsvariablen für die Docker Container:
@FOR /f "tokens=*" %i IN ('docker-machine env geomat') DO @%i
Nun kann der lokale docker
client Befehle gegen die laufenden Container ausführen.
Würden wir nun eine Shell starten, hätte man in dieser keine Verbindung zur PostgreSQL-Datenbank. Bei jedem SQL-Befehl käme dadurch eine OperationalError
-Exception auf. Zunächst müssen wir uns also in die Shell des Django Containers begeben, wofür wir dessen Container-ID benötigen:
docker ps
Das Ergebnis sollte in etwa so aussehen:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
[...]
12345678abcd djangogeomat_django "/entrypoint.sh/start" 4 days ago Up About an Hour
[...]
0987654321de djangogeomat_postgres "/docker-entrypoint.sh" .......... .................
Der erste angezeigte Container ist der Django Container, der zweite der Datenbank Container.
Da wir nun die ID unseres Containers wissen, können wir nun in diesem eine Shell öffnen und die Umgebungsvariablen der Datenbank initialisieren:
docker exec -it <container ID> bash
Hier bei ist die ID des Django Containers: 12345678abcd
. Der Befehl lautet also:
docker exec -it 12345678abcd bash
Nach Ausführung des Befehls sollte man nun bash
innerhalb des Django Containers gestartet haben:
root@12345678abcd:/app#
Innerhalb des Django Containers müssen wir nun die Verbindung zum Datenbank Container initialisieren. Das geschieht folgendermaßen:
root@12345678abcd:/app# export DATABASE_URL=postgres://$POSTGRES_USER:$POSTGRES_PASSWORD@postgres:5432/$POSTGRES_USER
Nun ist alles dafür bereit die IPython Shell zu starten.
Dazu ist nur noch ein Befehl nötig:
root@12345678abcd:/app# python manage.py shell_plus --ipython
Dank dem django-extensions
Paket importiert diese IPython Session viele notwendigen Module (z.B. die eigens definierten Modelle, das User Modell, etc.).