python / intermediate
Snippet
Django Signals für Modell-Ereignisbehandlung
Django Signals ermöglichen es, Ihre Anwendungslogik zu entkoppeln, indem Sie Aktionen als Reaktion auf bestimmte Ereignisse auslösen. Das post_save-Signal wird ausgelöst, nachdem eine Modell-Instanz gespeichert wurde, perfekt für das Erstellen verwandter Objekte oder das Senden von Benachrichtigungen. Pre_delete wird ausgelöst, bevor ein Objekt gelöscht wird, nützlich für Bereinigungsoperationen oder kaskadierende Löschungen.
snippet.py
1
from django.db.models.signals import post_save, pre_delete\nfrom django.dispatch import receiver\nfrom django.core.mail import send_mail\n\nclass UserProfile(models.Model):\n user = models.OneToOneField(User, on_delete=models.CASCADE)\n bio = models.TextField(max_length=500)\n notification_enabled = models.BooleanField(default=True)\n\n@receiver(post_save, sender=User)\ndef create_user_profile(sender, instance, created, **kwargs):\n if created:\n UserProfile.objects.create(user=instance)\n send_mail(\n 'Welcome to Capypad',\n 'Your account has been created.',\n '[email protected]',\n [instance.email]\n )\n\n@receiver(pre_delete, sender=User)\ndef delete_related_profile(sender, instance, **kwargs):\n if hasattr(instance, 'userprofile'):\n instance.userprofile.delete()
django
Erklärung
1
@receiver(post_save, sender=User)
Decorator zur Registrierung eines Signal-Handlers für User-Modell-Speicherereignisse
2
if created:
Prüfe, ob dies eine neue Instanz ist, die erstellt wird
3
UserProfile.objects.create(user=instance)
Erstelle das zugehörige Profil automatisch
4
send_mail('Welcome...', [instance.email])
Sende Willkommens-E-Mail an neuen Benutzer
5
@receiver(pre_delete, sender=User)
Signal zur Bereinigung vor User-Löschung