Django Academy · Lekcja

Sygnały post_save i pre_delete

Uruchamianie kodu przy zmianie modeli

Lekcja 1 z 413 kroki

Sygnały post_save i pre_delete to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Django Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Django Academy zawiera 4 lekcji w sumie.

Sygnały w jednym zdaniu

Sygnał pozwala jednej części Django ogłosić, że coś się wydarzyło, aby inny kod mógł zareagować bez bezpośredniego wywołania. 

Po co reagować na zdarzenia

Czasami po zmianie modelu potrzebne są efekty uboczne, na przykład wysłanie powitalnego e-maila po rejestracji. Sygnały pozwalają umieścić tę reakcję poza logiką zapisu.

Sygnał post_save

Sygnał post_save jest emitowany natychmiast po zapisaniu instancji modelu w bazie danych, więc wiadomo, że wiersz już istnieje.

Odbiornik post_save

Należy napisać funkcję i poinformować Django, aby wywoływało ją po emisji post_save. Odbiornik otrzymuje zapisaną instancję w argumentach.

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Profile)
def on_save(sender, instance, **kwargs):
    print("saved", instance)

Flaga created

post_save przekazuje wartość logiczną created: True dla całkowicie nowego wiersza i False przy aktualizacji. Użyj jej, aby uruchamiać kod tylko podczas pierwszego utworzenia.

def on_save(sender, instance, created, **kwargs):
    if created:
        print("new", instance)

Sygnał pre_delete

Sygnał pre_delete jest emitowany tuż przed usunięciem wiersza, dlatego instancja nadal istnieje, gdy uruchamia się kod.

Odbiornik pre_delete

Użyj pre_delete do usunięcia powiązanych zasobów, na przykład pliku, zanim wiersz zniknie z bazy danych. Instancja jest wtedy nadal w pełni dostępna.

from django.db.models.signals import pre_delete

@receiver(pre_delete, sender=Photo)
def clean_up(sender, instance, **kwargs):
    instance.image.delete(save=False)

Także pre_save i post_delete

Django udostępnia również pre_save i post_delete. Razem obejmują momenty tuż przed i tuż po każdym zapisie lub usunięciu.

Argument sender

sender wskazuje klasę modelu, która wywołała sygnał. Przekaż sender= do odbiornika, aby nasłuchiwał tylko jednego modelu.

Zawsze akceptuj kwargs

Każdy odbiornik powinien akceptować **kwargs. Django może przekazywać dodatkowe argumenty, a ich brak powoduje błąd podczas emisji sygnału.

Rozdzielaj logikę, nie ukrywaj jej

Sygnały świetnie sprawdzają się przy reakcjach przekrojowych, ale rozbudowana logika może być trudna do prześledzenia. Sięgaj po signal, gdy reakcja jest rzeczywiście odrębna.

Szybkie sprawdzenie

Sprawdź, jak post_save odróżnia nowe wiersze od aktualizacji.

Podsumowanie: Reagowanie na zdarzenia modeli

Poznał(a) Pan/Pani signals Django: post_save jest emitowany po zapisie i przekazuje flagę created, pre_delete przed usunięciem, a każdy odbiornik powinien akceptować **kwargs. ✅

Bezpłatny start

Ucz się Python dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
30
Lekcje
120

Często zadawane pytania

Czy lekcja „Sygnały post_save i pre_delete” jest bezpłatna?

Tak — pełny tekst „Sygnały post_save i pre_delete” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Django Academy, przejdź na CoddyKit PRO. Kurs Django Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Sygnały post_save i pre_delete”?

Uruchamianie kodu przy zmianie modeli Ćwiczysz Django Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Django Academy?

Nie wymagamy żadnego doświadczenia. Django Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Sygnały post_save i pre_delete”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Django Academy?

Tak. Każda lekcja Django Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Sygnały post_save i pre_delete
  2. Prawidłowe podłączanie odbiorników
  3. Pisanie własnego middleware
  4. Kolejność middleware i process_view
← Powrót do Django Academy