python / intermediate
Snippet
Django Signals für Entkoppelte Kommunikation
Django Signals implementieren das Observer-Muster und ermöglichen entkoppelte Kommunikation zwischen Komponenten. Wenn ein User-Modell gespeichert wird, werden verbundene Receiver automatisch ohne direkte Imports ausgeführt. Dieses Muster hält das User-Modell sauber und ermöglicht mehreren Systemen auf Änderungen zu reagieren. Signals werden synchron während der Speichertransaktion ausgeführt.
snippet.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from django.db.models.signals import post_savefrom django.dispatch import receiverfrom django.contrib.auth import get_user_modelUser = get_user_model()@receiver(post_save, sender=User)def create_user_profile(sender, instance, created, **kwargs):if created:from .models import ProfileProfile.objects.create(user=instance)@receiver(post_save, sender=User)def send_welcome_email(sender, instance, created, **kwargs):if created:print(f'Welcome email queued for {instance.email}')
django
Erklärung
1
@receiver(post_save, sender=User)
Decorator registriert diese Funktion als Receiver für das post_save Signal des Users
2
def create_user_profile(sender, instance, created, **kwargs):
Handler empfängt die Sender-Klasse, die erstellte Instanz und das created-Flag
3
if created:
Logik wird nur ausgeführt, wenn eine NEUE User-Instanz erstellt wird
4
Profile.objects.create(user=instance)
Erstellt die verknüpfte Profile-Instanz für den neuen User