Meilenstein MS_02 — Überarbeitung der Modelle, Architekturentscheidungen und Implementierung. Vom Konzept zur lauffähigen, öffentlich erreichbaren Anwendung.
Iterativ entwickelt in versionierten Ständen v5 → v8, damit jede Änderung nachvollziehbar bleibt.
Django liefert mit auth.User bereits eine konkrete, vom Framework verwaltete Benutzerklasse. Davon abzuleiten ist unüblich.
Die belegten Kurse werden am Profil gespeichert (courses, n:m-Beziehung). Auf dem Dashboard erscheinen dann die eigenen Aufgaben und die Kursaufgaben der gewählten Kurse.
Titel-Suche und Kursfilter wirken gleichzeitig; Aufgaben werden nach Priorität sortiert — hoch → mittel → niedrig.
Prioritäten sind farblich gekennzeichnet, überfällige Aufgaben werden optisch hervorgehoben.
Zu Kursaufgaben können Studierende Dateien hochladen — erlaubt sind PDF, PNG, JPG, DOCX und ZIP.
class Task(models.Model): user = models.ForeignKey(User, ...) title = models.CharField(max_length=200) complete = models.BooleanField(default=False) priority = models.CharField(choices=PRIORITY_CHOICES) due_date = models.DateField(null=True) def __str__(self): return self.title
class TaskCreate(LoginRequiredMixin, CreateView): model = Task fields = ['title', 'category', 'priority', 'due_date'] def form_valid(self, form): form.instance.user = self.request.user return super().form_valid(form)
Jedes Model ist eine Klasse, jede Datenbankzeile ein Objekt, jedes Feld ein Attribut.
Views erben von Djangos generischen Views und kombinieren Mixins — Mehrfachvererbung.
Eigenes Verhalten durch Überschreiben von form_valid(), get_success_url(), __str__().
Für den Kurs-Workflow kommen zwei Modelle hinzu: CourseTask (vom Dozenten veröffentlichte Aufgabe) und Submission (Datei-Abgabe eines Studierenden). Umgesetzt über Django-Migrationen.
Es gibt kein eigenes Status-Feld. Eine offene Aufgabe gilt als überfällig, sobald due_date < heute — die Markierung entsteht erst bei der Anzeige.
Das trennt berechnete von gespeicherten Zuständen und vermeidet Redundanz im Datenmodell.
| ID | Testfall | Status |
|---|---|---|
| T2/T3 | Login leitet rollengerecht weiter | ✓ bestanden |
| T4 | Student wird vom Dozenten-Dashboard abgewiesen | ✓ bestanden |
| T5 | Aufgabe mit Priorität & Fälligkeit, überfällig markiert | ✓ bestanden |
| T6/T7 | Dashboard-Kennzahlen · Suche + Filter kombiniert | ✓ bestanden |
| T9/T10 | Login & Zugriff über die HTTPS-Domain | ✓ nach Fix |
Frühe Modelle sind vorläufig. Die Vererbung wich dem idiomatischen Profil-Modell — Modelle dürfen sich begründet ändern.
Framework-Konventionen nutzen. Klassenbasierte Views, Mixins und Migrationen haben uns viel Arbeit abgenommen.
Berechnet vs. gespeichert trennen. „Überfällig" wird abgeleitet — das vermeidet Redundanz.
Deployment ist eigene Arbeit. Container, HTTPS und Tunnel brachten Host-, CSRF- und IPv6-Hürden mit sich.