Создание собственного сигнала, когда пользователь активирует свой аккаунт - PullRequest
1 голос
/ 30 июня 2011

Я пытаюсь создать собственный сигнал, когда поле auth_user.is_active становится равным 1. Я посмотрел документы Django по сигналам, но у меня возникли проблемы с пониманием того, как реализовать пользовательские сигналы.

Когда учетная запись пользователя становится активной, я хочу выполнить следующую функцию:

def new_user(sender, **kwargs)
    profile = User.objects.get(id=user_id).get_profile()
    return RecentActivity(content_object=profile, event_type=1, timestamp=datetime.datetime.now())

Как бы я это сделал. А также, в чем преимущество использования сигналов по сравнению с простой вставкой базы данных напрямую? Спасибо.

Ответы [ 2 ]

1 голос
/ 30 июня 2011

Вот что я сделал:

# in models.py
@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():
        profile = User.objects.get(pk=instance.pk).get_profile()
        RecentActivity.objects.create(content_object=profile, event_type=1, timestamp=datetime.datetime.now())
1 голос
/ 30 июня 2011

Если вы хотите что-то сделать при изменении поля, вы можете использовать подход из здесь (ответ Джоша).

Сигналы обычно используются для связи между приложениями.Например, auth приложение отправляет сигнал user_logged_in.Поэтому, если вы хотите что-то сделать, когда пользователь входит в систему, вы просто обрабатываете этот сигнал, нет необходимости исправлять приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...