Python Lernhandbuch

Kapitel 17: Abschlussprojekt: Bestell-Portal

Übung in VS Code lösen

Anforderungen

  1. Auf dem SFTP-Server liegen im Ordner export CSV-Dateien mit den Spalten bestell_nr;kunde;betrag;datum. Das Datum steht als TT.MM.JJJJ, der Betrag mit Komma (12,50).
  2. Der Import-Job holt neue Dateien, prüft jede Zeile und schreibt gültige Zeilen in die Tabelle bestellungen. Läuft der Job zweimal mit denselben Daten, entstehen keine Duplikate (Schlüssel: bestell_nr).
  3. Fehlerhafte Zeilen werden mit Zeilennummer und Grund protokolliert und nicht importiert. Der Rest der Datei wird trotzdem verarbeitet.
  4. Die Webapp zeigt eine Tabelle mit Live-Suche (nach Kunde), die Summe der angezeigten Beträge und ein Balkendiagramm mit dem Umsatz pro Monat.
  5. Ein Knopf "Excel-Export" lädt die aktuell gefilterten Bestellungen als .xlsx herunter.
  6. Dazu gibt es eine JSON-API (GET /api/bestellungen) mit Fehlerantworten (404, 422).
  7. Alles startet mit docker compose up -d. Zugangsdaten stehen in .env.

Aufbau

text
bestell-portal/
├── pyproject.toml, uv.lock
├── Dockerfile, compose.yaml, .env, .dockerignore
├── main.py            # Webapp (Routen)
├── db.py              # Datenbankpool (Kapitel 14)
├── schema.py          # SQL-Schema, ohne Datenbankverbindung
├── importer.py        # SFTP holen, prüfen, importieren
├── templates/         # base.html, bestellungen.html, _zeilen.html
├── static/            # pico.min.css, htmx.min.js, chart.umd.min.js, app.css
└── tests/
    └── test_importer.py

Datenfluss: SFTP (CSV) → importer.py → Postgres (bestellungen) → main.py → Browser (Tabelle, Diagramm, Excel, JSON).

Vorgehen in Schritten

Arbeite in dieser Reihenfolge. Nach jedem Schritt läuft etwas Sichtbares.

  1. Datenbank: Tabelle bestellungen in Postgres anlegen, Testdaten per SQL einfügen.
  2. Webapp, nur lesen: Tabelle anzeigen, dann Suche, dann Summe.
  3. Import ohne SFTP: importer.py liest eine lokale CSV-Datei, prüft Zeilen, schreibt in die Datenbank. Mit pytest testen.
  4. SFTP dazu: Test-SFTP-Server (Kapitel 13) starten, Dateien herunterladen und archivieren.
  5. Export und Diagramm: Excel-Export, JSON-API, Monatsdiagramm.
  6. Docker: Alles in compose.yaml, Import als Dienst mit profiles.
  7. Aufräumen: Logging, Fehlerfälle prüfen, README mit Startanleitung schreiben.

So arbeitest du an dieser Übung

Das Abschlussprojekt baust du in VS Code. Plane ein bis zwei Wochen ein und arbeite die Schritte der Reihe nach ab. Die Musterlösung zeigt den Kern; vergleiche sie erst, wenn dein Projekt läuft.

  1. Lege in VS Code einen Projektordner an, zum Beispiel uv init kapitel17, und installiere die Pakete mit uv add "fastapi[standard]" "psycopg[binary]" psycopg-pool paramiko openpyxl.
  2. Löse die Aufgabe selbst. Lies Fehlermeldungen von unten nach oben.
  3. Gehe die Checkliste unten durch. Hake ab, was dein Programm kann.
  4. Vergleiche danach mit der Musterlösung und ihrer Erklärung.

Checkliste: Tut dein Programm, was es soll?

Nur Musterlösung ansehen