Создание обработчика для сигнала user_activated

Я хочу получать сигнал, когда пользователь активирован (т.е. когда auth_user.is_active становится 1). Я хочу получить этот сигнал только один раз, в первый раз, когда пользователь активирован.

Я использовал ответ, данный на этот вопрос, и он работает для меня:

@receiver(pre_save, sender=User, dispatch_uid='get_active_user_once')
def new_user_activation_handler(sender, instance, **kwargs):
    if instance.is_active and User.objects.filter(pk=instance.pk, is_active=False).exists():
        logger.info('user is activated')

Однако, похоже, что это настраиваемый сигнал, я полагаю, что в django есть встроенный сигнал user_activated. Я пробовал использовать встроенный сигнал, но он не срабатывает:

from django_registration.signals import user_activated

@receiver(user_activated, sender=User, dispatch_uid='django_registration.signals.user_activated')
def new_user_activation_handler(sender, instance, **kwargs):
    logger.info('user is activated')

Есть идеи, почему подается этот сигнал?

У вас неправильный отправитель. Пожалуйста, посмотрите: Заменить:

@receiver(user_activated, sender=User, dispatch_uid='django_registration.signals.user_activated')
def new_user_activation_handler(sender, instance, **kwargs):
    logger.info('user is activated')

With:

from django_registration.backends.activation.views import ActivationView
@receiver(user_activated, sender=ActivationView, dispatch_uid='django_registration.signals.user_activated')
def new_user_activation_handler(sender, instance, **kwargs):
    logger.info('user is activated')
Вернуться на верх