Django Academy · Урок

Правильное подключение обработчиков

Регистрируйте сигналы в apps.py, чтобы избежать проблем

Урок 2 из 413 шагов

«Правильное подключение обработчиков» — бесплатный урок Django Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.

Получателей необходимо импортировать

receiver слушает сигнал только в том случае, если Django действительно импортирует модуль, в котором он находится. Если файл никогда не загружается, сигнал молча ничего не делает.

Классическая ловушка

Размещение получателей в models.py иногда работает случайно, а иногда нет. Именно этой ненадёжной связи следует избегать.

Используйте файл signals.py

Чистый подход — отдельный signals.py внутри приложения, где хранятся все получатели этого приложения в одном очевидном месте.

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

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

Хук AppConfig.ready

Django один раз при запуске вызывает ready() для каждой конфигурации приложения. Это официальное место для загрузки обработчиков сигналов.

Импортируйте внутри ready

В apps.py импортируйте модуль сигналов внутри ready, чтобы получатели регистрировались ровно один раз при запуске приложения.

from django.apps import AppConfig

class BlogConfig(AppConfig):
    name = "blog"

    def ready(self):
        from . import signals

Укажите default_app_config

Убедитесь, что приложение использует эту конфигурацию. Современный Django автоматически обнаруживает apps.py, поэтому обычно достаточно подходящего класса AppConfig.

connect без декоратора

Вместо @receiver можно подключить обработчик с помощью connect. Он выполняет ту же задачу и удобен для динамической регистрации.

post_save.connect(sync, sender=Profile)

Избегайте двойного срабатывания

Если модуль импортирован дважды, получатель может выполниться дважды. Централизация регистрации в ready() гарантирует, что каждый обработчик подключён только один раз.

Защита с помощью dispatch_uid

Передайте уникальный dispatch_uid, чтобы Django не подключал одного и того же получателя более одного раза, даже при повторных импортах.

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

Отключение получателей

Также можно вызвать disconnect, чтобы остановить обработчик. Это полезно в тестах, которые не должны запускать побочные действия.

Храните сигналы одного приложения вместе

Группировка обработчиков каждого приложения в его собственном signals.py делает реакции обнаруживаемыми и не позволяет им рассеиваться по всей кодовой базе.

Быстрая проверка

Вспомните, где следует регистрировать обработчики сигналов.

Итоги: правильное подключение сигналов

Вы узнали, как хранить получателей в signals.py, импортировать их из AppConfig.ready() и использовать dispatch_uid для предотвращения повторных подключений. ✅

Можно начать бесплатно

Изучай Python с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Правильное подключение обработчиков» бесплатный?

Да — полный текст урока «Правильное подключение обработчиков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.

Чему я научусь в уроке «Правильное подключение обработчиков»?

Регистрируйте сигналы в apps.py, чтобы избежать проблем Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Django Academy?

Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Правильное подключение обработчиков»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Django Academy?

Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сигналы post_save и pre_delete
  2. Правильное подключение обработчиков
  3. Написание собственного промежуточного ПО
  4. Порядок промежуточного ПО и process_view
← Назад к Django Academy