14 июня 2016 г. 17:55

306

Django регистрация.Добавляем пользователя в группу после регистрации

В своем проекте я использую замечательную библиотеку для регистрации пользователей django-registration. Так вот мне понадобилось , после регистрации пользователя добавлять его в одну из групп. И для решения данной задачи отлично подойдет django signals.

В самой библиотеке, после регистрации пользователя испускается сигнал user_registered . Мы можем повесить на этот сигнал обработчик и написать необходимый код для добавления пользователя в группу.

Для этого мы в проекте users создаем папку signals , и внутри нее создаем пустой файл __init__.py , а также добавляем файл handlers.py. И вот внутри этого файла пишем следующий код:


from django.dispatch import receiver
from django.contrib.auth.models import Group
from registration.signals import user_registered

@receiver(user_registered)
def user_registered_callback(sender, user, request, **kwargs):
    group_name = request.POST['group_id'] or None
    if group_name:
        try:
            g = Group.objects.get(name=group_name)
        except Group.DoewNotExists:
            g = None
        
        if g:
            g.user_set.add(user)
       

Мы используем тут встроенный сигнал user_registered библиотеки django-registration-redux. Мы можем использовать встроенные сигналы , которые есть в django или можем написать свой кастомный сигнал(как-нибудь я напишу об этом)

В заключении хотелось бы отметить, что мы могли не создавать папку signals, а просто создать файл signal.py и туда поместить этот код(это самый распространенный способ )

comments powered by Disqus