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 и туда поместить этот код(это самый распространенный способ )