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