Django Academy · Lekcja

Prawidłowe podłączanie odbiorników

Rejestrowanie sygnałów w apps.py, aby uniknąć problemów

Lekcja 2 z 413 kroki

Prawidłowe podłączanie odbiorników to bezpłatna lekcja Django Academy na CoddyKit. To lekcja 2 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.

Odbiorniki muszą być importowane

Odbiornik nasłuchuje tylko wtedy, gdy Django rzeczywiście zaimportuje moduł, w którym się znajduje. Jeśli plik nigdy nie zostanie załadowany, sygnał po cichu nic nie zrobi.

Klasyczna pułapka

Umieszczenie odbiorników w models.py czasami działa przez przypadek, a czasami nie. Ta kruchość to problem z połączeniem, którego należy unikać.

Użyj pliku signals.py

Czysty wzorzec polega na utworzeniu dedykowanego pliku signals.py wewnątrz aplikacji, zawierającego wszystkie odbiorniki tej aplikacji w jednym oczywistym miejscu.

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

@receiver(post_save, sender=Profile)
def sync(sender, instance, **kwargs):
    pass

Metoda AppConfig.ready

Django wywołuje ready() dla każdej konfiguracji aplikacji raz podczas uruchamiania. To oficjalne miejsce do ładowania obsługi sygnałów.

Importuj wewnątrz ready

W apps.py zaimportuj moduł signals z wnętrza ready, aby odbiorniki rejestrowały się dokładnie raz podczas uruchamiania aplikacji.

from django.apps import AppConfig

class BlogConfig(AppConfig):
    name = "blog"

    def ready(self):
        from . import signals

Wskaż default_app_config

Upewnij się, że aplikacja korzysta z tej konfiguracji. Nowoczesne wersje Django automatycznie wykrywają apps.py, więc zwykle wystarcza pasująca klasa AppConfig.

connect bez dekoratora

Zamiast @receiver można podłączyć procedurę obsługi za pomocą connect. Działa to tak samo i jest przydatne przy rejestracji dynamicznej.

post_save.connect(sync, sender=Profile)

Unikanie podwójnego wywołania

Jeśli moduł zostanie zaimportowany dwukrotnie, odbiornik może uruchomić się dwa razy. Centralizacja rejestracji w ready() gwarantuje, że każdy odbiornik zostanie podłączony tylko raz.

Zabezpieczenie dispatch_uid

Przekaż unikatowy dispatch_uid, aby Django nie pozwoliło podłączyć tego samego odbiornika więcej niż raz, nawet po ponownym imporcie.

post_save.connect(sync, sender=Profile, dispatch_uid="profile_sync")

Odłączanie odbiorników

Można również wywołać disconnect, aby zatrzymać procedurę obsługi. Jest to przydatne w testach, które nie powinny wywoływać efektów ubocznych.

Trzymaj sygnały jednej aplikacji razem

Grupowanie procedur obsługi każdej aplikacji w jej własnym pliku signals.py ułatwia ich odnajdywanie i zapobiega rozproszeniu po całej bazie kodu.

Szybkie sprawdzenie

Przypomnij sobie, gdzie należy rejestrować procedury obsługi sygnałów.

Podsumowanie: Prawidłowe podłączanie sygnałów

Nauczył(a) się Pan/Pani przechowywać odbiorniki w pliku signals.py, importować je z AppConfig.ready() i używać dispatch_uid, aby zapobiegać zduplikowanym połączeniom. ✅

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 „Prawidłowe podłączanie odbiorników” jest bezpłatna?

Tak — pełny tekst „Prawidłowe podłączanie odbiorników” 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 „Prawidłowe podłączanie odbiorników”?

Rejestrowanie sygnałów w apps.py, aby uniknąć problemów Ć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 2 z 4.

Ile czasu zajmuje lekcja „Prawidłowe podłączanie odbiorników”?

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