Django: регистрировать разных пользователей в разные группы - PullRequest
0 голосов
/ 25 мая 2020

У меня есть два типа клиентов для регистрации в моей системе (обычные и основные) и администратор для наблюдения за всеми операциями. Как назначить каждого пользователя по-разному на странице шаблона регистрации по-разному в эти три группы? Я хочу иметь дело только с групповым методом для ролей и аутентификации. Вот моя теория, пожалуйста, помогите:

My decorators.py

def allowed_users(allowed_roles=[]):
    def decorator(view_func):
        def wrapper_func(request,*args,**kwargs):

            group = None
            if request.user.groups.exists():
                group = request.user.groups.all()[0].name

            if group in allowed_roles:
                return view_func(request,*args,**kwargs)
            else:
                return HttpResponse('You are not authorized to view this page')
        return wrapper_func
    return decorator



def admin_only(view_func):
    def wrapper_function(request,*args,**kwargs):
        group = None
        if request.user.groups.exists():
            group = request.user.groups.all()[0].name

        if group == 'client':
            return redirect('user-page')

        if group == 'prime':
            return redirect('user-page')

        if group == 'admin':
            return view_func(request,*args,**kwargs)


    return wrapper_function

signal.py

from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.contrib.auth.models import Group


from .models import Client,Prime

def client_profile(sender, instance, created, **kwargs):
    if created:
        group = Group.objects.get(name='client')
        instance.groups.add(group)
        Client.objects.create(
            user=instance,
            name=instance.username,
            )
        print('Profile created!')

post_save.connect(client_profile, sender=User)


def prime_profile(sender, instance, created, **kwargs):
    if created:
        group = Group.objects.get(name='prime')
        instance.groups.add(group)
        Prime.objects.create(
            user=instance,
            name=instance.username,
            )
        print('Profile created IN PRIME!')

post_save.connect(prime_profile, sender=User)

views.py

@unauthenticated_user
def registerPage(request):

    form = CreateUserForm()

    if request.method == "POST":
        form = CreateUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')

            messages.success(request,'Account was created for ' + username)

            return redirect('login')


    context = {"form":form}
    return render(request, 'main/register.html',context)

forms.py

class CreateUserForm(UserCreationForm):
    class Meta:
        model = User
        fields = ['username','email','password1','password2']
...