Flask – 05 Abschlussprojekt
Flask Abschlussprojekt
Voraussetzungen
Bevor du mit diesem Modul startest, solltest du bereits vertraut sein mit:
Python-Module:
- Python – 01 Kommentare Variablen Strings - Variablen, Strings und grundlegende Datentypen
- Python – 02 Rechnen mit Integer und Floats - Rechnen mit Zahlen in Python
- Python – 03 Wahrheitswerte und Kontrollstrukturen - Bedingungen und if-else Anweisungen
- Python – 04 Listen - Grundlagen von Listen in Python
- Python – 05 For-Schleifen - Schleifen in Python
- Python – 06 While-Schleifen - While-Schleifen und Eingabevalidierung
- Python – 07 Funktionen und Methoden - Funktionen erstellen und nutzen
- Python – 09 Algorithmen und Abschlussübung - Algorithmen und strukturiertes Programmieren
Flask-Module:
- Flask – 01 Erste Schritte - Flask-Grundlagen und erste Routen
- Flask – 02 Jinja Templating Grundlagen - Variablen, Bedingungen und POST-Formulare
- Flask – 03 Jinja Schleifen und Listen - Listen in Templates anzeigen
- Flask – 04 Formulare und Datenverarbeitung - Validierung und Datenverarbeitung
Projekt-Optionen
Wähle eines der folgenden Projekte:
Option 1: To-Do-Listen-App
Beschreibung: Eine Web-App, mit der Benutzer Aufgaben erstellen, anzeigen, bearbeiten und löschen können.
Mindest-Funktionen:
Aufgabe erstellen
- Formular mit Titel (Pflicht) und Beschreibung (optional)
- Validierung: Titel mindestens 3 Zeichen
- Jede Aufgabe hat Status: “Offen” oder “Erledigt”
Aufgaben anzeigen
- Liste aller Aufgaben
- Offene und erledigte Aufgaben visuell unterscheidbar
- Statistik: Anzahl offener/erledigter Aufgaben
Aufgabe als erledigt markieren
- Button/Link um Status zu ändern
- Visuelles Feedback (z.B. durchgestrichen)
Aufgabe löschen
- Button/Link zum Löschen
- Optional: Bestätigungsdialog
Bonus-Features (optional):
- Priorität (Hoch/Mittel/Niedrig) für Aufgaben
- Fälligkeitsdatum
- Aufgaben filtern (nur offene/nur erledigte)
- Aufgaben nach Priorität sortieren
- Bearbeitungs-Funktion
Technologien:
- Listen zum Speichern
- Funktionen für CRUD-Operationen
- Jinja-Schleifen für Darstellung
- Formulare mit Validierung
- Bedingungen in Templates
Option 2: Quiz-App
Beschreibung: Eine interaktive Quiz-App mit mehreren Fragen und Auswertung.
Mindest-Funktionen:
Quiz-Fragen definieren
- Mindestens 10 Fragen
- Jede Frage hat 4 Antwortmöglichkeiten
- Eine richtige Antwort pro Frage
- Verschiedene Kategorien (z.B. Allgemeinwissen, Python, Mathe)
Quiz starten
- Zeige alle Fragen in einem Formular
- Radio-Buttons für Antworten
- Validierung: Alle Fragen müssen beantwortet werden
Auswertung
- Zähle richtige Antworten
- Zeige Prozent-Punktzahl
- Zeige welche Fragen richtig/falsch waren
- Zeige die richtigen Antworten
Ergebnis-Seite
- Zusammenfassung der Leistung
- Visuelle Darstellung (z.B. farbige Balken)
- Button um Quiz neu zu starten
Bonus-Features (optional):
- Highscore-Liste (beste Ergebnisse speichern)
- Timer für Quiz (z.B. 2 Minuten)
- Kategorien-Auswahl (nur Fragen einer Kategorie)
- Schwierigkeitsgrade
- Zufällige Reihenfolge der Fragen
- Zeige nur X zufällige Fragen (nicht alle)
Technologien:
- Liste von Dictionaries für Fragen
- Funktionen für Auswertung
- Jinja-Schleifen für Fragen/Ergebnisse
- Bedingungen für richtig/falsch
- Berechnungen (Prozent)
Option 3: Mini-Shop
Beschreibung: Ein einfacher Online-Shop mit Produkten und Warenkorb.
Mindest-Funktionen:
Produkt-Katalog
- Mindestens 10 Produkte
- Jedes Produkt hat: Name, Preis, Beschreibung, Kategorie
- Produkte in Kategorien anzeigen
- Suchfunktion (nach Name)
Warenkorb
- Produkte zum Warenkorb hinzufügen
- Warenkorb anzeigen (alle hinzugefügten Produkte)
- Anzahl pro Produkt anzeigen
- Gesamtpreis berechnen und anzeigen
Produkt-Detail-Seite
- Einzelne Seite pro Produkt
- Zeige alle Produktinformationen
- Button “In den Warenkorb”
Checkout
- Formular mit Name, Adresse, E-Mail
- Validierung aller Felder
- Bestellbestätigung mit Zusammenfassung
Bonus-Features (optional):
- Filter nach Kategorie
- Sortierung (nach Preis, Name)
- Anzahl im Warenkorb ändern (erhöhen/verringern)
- Produkt aus Warenkorb entfernen
- Bewertungen/Sterne für Produkte
- Produktbilder (URL zu Bildern)
Technologien:
- Liste von Dictionaries für Produkte
- Globale Liste für Warenkorb
- Funktionen für Berechnungen
- Jinja-Schleifen für Produkte
- Formulare mit Validierung
- URL-Parameter für Produkt-IDs
Bewertungskriterien
Dein Projekt wird nach folgenden Kriterien bewertet:
1. Funktionalität (40 Punkte)
Vollständigkeit (20 Punkte)
- Alle Mindest-Funktionen implementiert
- Funktionen arbeiten korrekt
- Keine kritischen Bugs
Datenvalidierung (10 Punkte)
- Eingaben werden validiert
- Fehlerhafte Eingaben führen nicht zum Absturz
- Sinnvolle Fehlermeldungen
Benutzerführung (10 Punkte)
- App ist intuitiv bedienbar
- Navigation funktioniert
- Feedback für Benutzeraktionen
2. Code-Qualität (30 Punkte)
Struktur & Organisation (10 Punkte)
- Code ist logisch organisiert
- Funktionen werden sinnvoll genutzt
- Keine Wiederholungen (DRY-Prinzip)
Lesbarkeit (10 Punkte)
- Aussagekräftige Variablen-Namen
- Kommentare wo nötig
- Einheitlicher Code-Stil
Flask-Best-Practices (10 Punkte)
- Template-Vererbung genutzt
- URL-Parameter korrekt verwendet
- Post-Redirect-Get Pattern
- Statische Dateien korrekt eingebunden
3. Design & User Experience (20 Punkte)
Visuelles Design (10 Punkte)
- CSS sinnvoll eingesetzt
- Konsistentes Aussehen
- Übersichtliche Layouts
Benutzererfahrung (10 Punkte)
- Fehler werden klar kommuniziert
- Erfolgs-Feedback wird gegeben
- Navigation ist logisch
4. Dokumentation (10 Punkte)
README-Datei (5 Punkte)
- Beschreibt was die App macht
- Erklärt wie man sie startet
- Listet verwendete Technologien
Code-Kommentare (5 Punkte)
- Wichtige Funktionen dokumentiert
- Komplexe Logik erklärt
Projekt-Struktur
Dein Projekt sollte folgende Struktur haben:
mein_projekt/
│
├── app.py # Haupt-Flask-App
├── README.md # Projekt-Dokumentation
│
├── templates/
│ ├── base.html # Basis-Template
│ ├── home.html # Startseite
│ └── ... # Weitere Templates
│
└── static/
├── style.css # Haupt-Stylesheet
└── ... # Weitere CSS/BilderEmpfohlene Ordner-Organisation
Für größere Projekte:
templates/
├── base.html
├── layouts/
│ ├── header.html
│ └── footer.html
└── pages/
├── home.html
├── ...Aber für dieses Projekt reicht die einfache Struktur!
Zeitplan & Vorgehensweise
Empfohlener Zeitplan (3-4 Stunden)
Phase 1: Planung (30 Minuten)
- Projekt-Option wählen
- Features definieren
- Datei-Struktur skizzieren
- Datenmodell überlegen (welche Listen/Dictionaries?)
Phase 2: Grundgerüst (30 Minuten)
app.pyund Ordner erstellenbase.htmlmit Navigation- Basis-CSS für Layout
- Erste Route
/erstellen
Phase 3: Haupt-Features (90 Minuten)
- CRUD-Operationen implementieren
- Formulare mit Validierung
- Templates erstellen
- Daten speichern/abrufen
Phase 4: Design & Polish (30 Minuten)
- CSS verbessern
- Fehlerbehandlung testen
- User Experience optimieren
- Konsistenz prüfen
Phase 5: Testing & Dokumentation (30 Minuten)
- Alle Features testen
- Bugs fixen
- README schreiben
- Code kommentieren
Tipp: Inkrementell arbeiten
Baue Feature für Feature!
- Starte mit dem einfachsten Feature
- Teste es gründlich
- Erst dann zum nächsten Feature
Nicht: Versuche alles auf einmal zu bauen!
Schritt-für-Schritt Anleitung
Schritt 1: Projekt initialisieren
| |
Schritt 2: Basis-Setup (app.py)
| |
Schritt 3: Basis-Template (base.html)
| |
Schritt 4: Basis-CSS (style.css)
| |
Schritt 5: README schreiben
| |
App starten:
1python app.pyBrowser öffnen:
http://localhost:5000
Verwendete Technologien
- Python 3
- Flask
- HTML/CSS
- Jinja2 Templates
Autor
[Dein Name]
---
## Hilfreiche Code-Beispiele
### CRUD-Operationen für To-Do-Liste
```python
# CREATE - Neues To-Do hinzufügen
@app.route("/todos/neu", methods=['POST'])
def todo_erstellen():
titel = request.form.get('titel', '').strip()
beschreibung = request.form.get('beschreibung', '').strip()
if len(titel) < 3:
return render_template("fehler.html", fehler="Titel zu kurz")
todo = {
"id": len(todos) + 1,
"titel": titel,
"beschreibung": beschreibung,
"erledigt": False
}
todos.append(todo)
return redirect(url_for('todos_anzeigen'))
# READ - Alle To-Dos anzeigen
@app.route("/todos")
def todos_anzeigen():
return render_template("todos.html", todos=todos)
# UPDATE - To-Do als erledigt markieren
@app.route("/todos/<int:todo_id>/erledigt")
def todo_erledigen(todo_id):
for todo in todos:
if todo["id"] == todo_id:
todo["erledigt"] = not todo["erledigt"]
break
return redirect(url_for('todos_anzeigen'))
# DELETE - To-Do löschen
@app.route("/todos/<int:todo_id>/loeschen")
def todo_loeschen(todo_id):
global todos
todos = [t for t in todos if t["id"] != todo_id]
return redirect(url_for('todos_anzeigen'))Berechnungen im Warenkorb
| |
Quiz auswerten
| |
Häufige Probleme & Lösungen
Problem 1: Daten gehen verloren beim Neustarten
Ursache: Globale Listen werden beim Server-Neustart geleert.
Lösung: Das ist für dieses Projekt OK! In echten Apps würdest du eine Datenbank verwenden.
Workaround (optional): Speichere Daten in einer JSON-Datei:
| |
Problem 2: Templates finden die CSS-Datei nicht
Lösung: Prüfe:
- Liegt
style.cssimstatic/Ordner? - Verwendest du
{{ url_for('static', filename='style.css') }}? - Ist der Flask-Server neu gestartet?
Problem 3: POST-Formular funktioniert nicht
Lösung: Prüfe:
- Route akzeptiert POST:
methods=['GET', 'POST'] - Form hat
method="POST" - Input-Felder haben
name-Attribute - Du verwendest
request.form.get('name')
Abgabe-Checkliste
Bevor du dein Projekt abgibst, gehe diese Checkliste durch:
Funktionalität
- Alle Mindest-Features funktionieren
- Keine kritischen Bugs
- Validierung funktioniert
- Fehlerbehandlung vorhanden
Code-Qualität
- Code ist organisiert und lesbar
- Funktionen haben aussagekräftige Namen
- Keine Wiederholungen im Code
- Kommentare wo nötig
Templates & Design
- Base-Template wird verwendet
- Navigation funktioniert
- CSS ist eingebunden
- Design ist konsistent
Dokumentation
- README.md ist vorhanden
- README erklärt das Projekt
- Installations-Anleitung ist klar
- Wichtige Funktionen sind kommentiert
Testing
- Alle Features manuell getestet
- Formulare mit verschiedenen Eingaben getestet
- Validierung funktioniert bei falschen Eingaben
- Navigation zwischen Seiten funktioniert
Inspiration & Beispiele
Design-Inspiration
- Bootstrap Dokumentation - für Layout-Ideen
- CSS-Tricks - für CSS-Techniken
- Schaue dir echte Web-Apps an und überlege, was du magst
Feature-Ideen
Für alle Projekte:
- Dark Mode / Light Mode Toggle
- Suchfunktion
- Sortier-Optionen
- Filter-Funktionen
- Statistiken/Dashboards
- Export-Funktionen (z.B. als Text-Datei)
To-Do-Liste:
- Kategorien/Tags für Aufgaben
- Wiederholende Aufgaben
- Unteraufgaben
- Farbcodes für Prioritäten
Quiz-App:
- Verschiedene Quiz-Kategorien
- Schwierigkeitsgrade
- Bestenliste
- Timer pro Frage
- Erklärungen zu Antworten
Shop:
- Produktbewertungen
- Sonderangebote
- Gutschein-Codes
- Produktvergleich
- Wunschliste
Nach dem Projekt
Was du gelernt hast
Durch dieses Projekt hast du praktische Erfahrung gesammelt mit:
- Flask-Routen und Request-Handling
- Template-Vererbung und Jinja-Syntax
- Formular-Verarbeitung und Validierung
- Datenstrukturen (Listen, Dictionaries)
- CRUD-Operationen
- CSS-Styling
- Projekt-Organisation
Nächste Schritte
Wenn du mehr lernen möchtest:
- Datenbanken: Lerne SQLite oder PostgreSQL für persistente Datenspeicherung
- Flask-Extensions: Entdecke Flask-Login, Flask-WTF, Flask-SQLAlchemy
- JavaScript: Füge Interaktivität hinzu (z.B. ohne Seiten-Reload)
- Deployment: Veröffentliche deine App online (z.B. auf Render, PythonAnywhere)
- REST APIs: Erstelle Backend-APIs für Frontend-Frameworks
Zusammenfassung
Projekt-Übersicht
Deine Aufgabe:
- Wähle ein Projekt (To-Do, Quiz, oder Shop)
- Implementiere alle Mindest-Features
- Schreibe sauberen, organisierten Code
- Gestalte ein ansprechendes Design
- Dokumentiere dein Projekt
Zeitrahmen: 3-4 Stunden
Bewertung:
- Funktionalität: 40%
- Code-Qualität: 30%
- Design/UX: 20%
- Dokumentation: 10%
Ziel: Zeige, dass du Flask verstanden hast und eigenständig eine Webanwendung entwickeln kannst!
Viel Erfolg!
Du schaffst das! Du hast alle notwendigen Kenntnisse aus den vorherigen Modulen. Arbeite systematisch, teste regelmäßig, und hab Spaß beim Entwickeln!
Bei Fragen oder Problemen: Schaue in die vorherigen Module zurück oder frage deinen Lehrer!