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.

Der Anfang

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.

Die Django Container-ID

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.

Verbindung zwischen den Containern herstellen

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.

IPython 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.).

IPython Snippet

⚠️ **GitHub.com Fallback** ⚠️