Signals & Lifecycle Hooks Flashcards
post_save, pre_delete, eigene Signale, Praxisanwendungen. (10 cards)
Was sind Django-Signals?
Django-Signals sind ein System zum Reagieren auf bestimmte Ereignisse im Lebenszyklus von Objekten, z. B. wenn ein Model gespeichert oder gelöscht wird. Sie ermöglichen lose Kopplung von Komponenten.
Wo befinden sich die Django-Signale im Projekt?
Signale werden meist in einer Datei namens signals.py innerhalb einer App definiert. Sie müssen in der apps.py oder in ready() registriert werden, damit Django sie erkennt.
Wie wird ein Signal in Django registriert?
Antwort:
In apps.py deiner App (z. B. MyAppConfig) im ready()-Block:
def ready(self):
import myapp.signals
Wie funktioniert ein post_save Signal für ein Model?
Es wird nach dem Speichern eines Model-Objekts ausgelöst. Beispiel:
from django.db.models.signals import post_save
@receiver(post_save, sender=MyModel)
def handle_save(sender, instance, created, **kwargs):
if created:
print(“Neues Objekt erstellt:”, instance)
Was ist der Unterschied zwischen pre_save und post_save?
pre_save wird vor dem Speichern aufgerufen (z. B. zum Validieren oder Ändern von Daten), post_save nach dem Speichern (z. B. für Logging oder Nachbearbeitung).
Was passiert, wenn ein Signal abstürzt oder fehlschlägt?
Ein Fehler im Signal kann die Verarbeitung stören, besonders bei post_save. Es ist gute Praxis, Signal-Handler mit try/except abzusichern.
Kann man mehrere Signal-Handler für dasselbe Signal registrieren?
Ja, mehrere @receiver-Funktionen können für dasselbe Signal/Modell registriert werden. Sie werden nacheinander aufgerufen.
Wie kann ein Signal wieder abgemeldet werden?
Du kannst signal.disconnect(handler, sender=MyModel) verwenden, z. B. für Tests oder spezielle Kontexte, um das Signal temporär zu deaktivieren.
Können eigene (benutzerdefinierte) Signale erstellt werden?
Ja, mit Signal = django.dispatch.Signal(). Man kann beliebige Argumente definieren und sie mit .send() auslösen.
Welche Praxisprobleme können bei übermäßiger Nutzung von Signals entstehen?
Schlecht nachvollziehbare Seiteneffekte
Schwierige Testbarkeit
Leistungseinbußen bei vielen Signals
Deshalb: Signale nur bei echter Entkopplung nutzen, nicht als Ersatz für normale Methodenlogik.