Создание обработчика для сигнала 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')