python / intermediate
Snippet
Ausfallsicherer Signal-Handler mit Ausnahmeisolierung und Protokollierung
Django-Signale werden synchron innerhalb des Datenbank-Transaktionslebenszyklus ausgeführt, sofern sie nicht explizit ausgelagert werden. Das Einbetten der Receiver-Logik in Ausnahmebehandlungsblöcke verhindert, dass Signalfehler die primäre Speicheroperation abbrechen.
snippet.py
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import loggingfrom django.db.models.signals import post_savefrom django.dispatch import receiverfrom django.contrib.auth.models import Userlogger = logging.getLogger(__name__)@receiver(post_save, sender=User)def initialize_user_profile(sender, instance, created, **kwargs):if not created:returntry:# Imagine an external service call or database creationlogger.info(f"Triggered profile creation sequence for user ID: {instance.pk}")except Exception as exc:logger.error(f"Failed user initialization signal handler for ID {instance.pk}: {exc}", exc_info=True)
django
Erklärung
1
@receiver(post_save, sender=User)
Registriert die Empfängerfunktion, damit sie automatisch reagiert, wenn eine User-Modellinstanz gespeichert wird.
2
if not created:
Stellt sicher, dass die Ausführungslogik nur bei Erstellung neuer Datensätze und nicht bei Updates läuft.
3
try:
Isoliert die Ausführung des Signal-Codes, um zu verhindern, dass nachgelagerte Fehler nach oben steigen.
4
logger.error(f"Failed user initialization signal handler for ID {instance.pk}: {exc}", exc_info=True)
Protokolliert den vollständigen Traceback ohne die Ausnahme erneut auszulösen, wodurch der Hauptprozess geschützt wird.