Django-Projekt MyGear mit Postgres
Postgres ist installiert und läuft und Django ist ebenfalls installiert. Doch in der letzten Version haben wir MySQL benutzt. Jetzt müssten wir es für Postgres fit machen.
Damit Django mit Postgres spricht, muss ein Adapter installiert werden. Dieser nennt sich Psycopg und kommt aktuell in Version 3.
pip install "psycopg[binary,pool]"
Für den Cybersecurity-Kurs der Universität Helsinki ist ein Kursteil ein Projekt mit Django und Python. Die Aufgabe ist es, ein Projekt mit Sicherheitslücken zu erstellen, diese dann zu beheben und entsprechend zu dokumentieren. Ich nutze es gleich, um eine Ausrüstungsverwaltung für Sportler, in der ersten Version, Fahrräder und Schuhe, zu erstellen. Sollten also hier Fehler auftauchen oder Probleme, dürft Ihr mich gerne kontaktieren.
Also erstellen wir ein Projekt mit Django.
django-admin startproject mygear
cd mygear
Damit wird die grundlegende Struktur angelegt und der Verzeichnisbaum sollte so aussehen:
.
├── manage.py
└── mygear
├── asgi.py
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py
Bei der Installation von Postgres, oben verlinkt, habe ich über ein init-Script schon die Datenbank dafür und auch den User anlegen lassen. Jetzt müssen wir Django sagen, dass es diese Datenbank auch nutzt.
Ich öffne die Daten mygear/settings.py und trage im Abschnitt DATABASES statt sqlite3 folgendes ein:
Vorher:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
Nachher, die Logindaten müssen natürlich an die aus dem init-Script angepasst werden:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
Jetzt müssen die Datenbank-Tabellen erstellt werden:
python manage.py migrate
Sollte dies mit permission denied for schema public abbrechen, müssen in der Datenbank, z.B. über das PGAdmin-Tool, noch rechte vergeben werden.
GRANT ALL PRIVILEGES ON SCHEMA public TO myuser;
Damit hat es dann bei mir funktioniert.
Dann testen wir mal, indem wir einen Superuser, also einen Admin, erstellen:
python manage.py createsuperuser
Und den lokalen eingebauten Webserver von Django starten:
python manage.py runserver
Über die Serveradresse, in der Regel http://127.0.0.1:8000/, sollte jetzt das Django-Dashboard erscheinen.

In der settings.py im Ordner mygear passen wir jetzt noch ein paar Kleinigkeiten an.
Den Eintrag TIME_ZONE = 'UTC' ändere ich auf eine lokale TIME_ZONE = 'Europe/Berlin'.
Aus LANGUAGE_CODE = 'en-us' mache ich LANGUAGE_CODE = 'de-de'.
Hinter STATIC_URL = 'static/' ergänze ich eine weitere Zeile STATIC_ROOT = BASE_DIR / 'static'. Hier landen später die CSS-Files und weitere Dateien, die fest im Projekt benutzt werden, wie Bilder.