Установите группы в шаблоне Django - PullRequest
1 голос
/ 21 июня 2020

Я хочу регистрировать пользователей с помощью шаблона, я также хочу, в момент регистрации, установить группу (разрешение групп по умолчанию, предоставленное Django) для каждого нового созданного пользователя, я установил группу пользователей в шаблоне но когда я смотрю на группу пользователей в базе данных, я обнаружил, что она пуста.

class ProfileUserManager(BaseUserManager):

def create_user(self, username, password,**extra_fields):

    user = self.model(username=username, **extra_fields)
    user.set_password(password)
    user.save()
    return user

def create_superuser(self, username, password,**extra_fields):

    extra_fields.setdefault('is_staff', True)
    extra_fields.setdefault('is_superuser', True)
    extra_fields.setdefault('is_active', True)

    if extra_fields.get('is_staff') is not True:
         raise ValueError(_('Superuser must have is_staff=True.'))
    if extra_fields.get('is_superuser') is not True:
        raise ValueError(_('Superuser must have is_superuser=True.'))
    return self.create_user(username,password,**extra_fields)

class ProfileUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(_('email address'), unique=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(default=timezone.now)
username = models.CharField(max_length=255,unique=True)
first_name=models.CharField(max_length=255)
last_name= models.CharField(max_length=255)
departement= models.CharField(max_length=255)


USERNAME_FIELD = 'username'
REQUIRED_FIELDS = []

objects = ProfileUserManager()


def __str__(self):
    return self.username

forms.py

class FormAddAccount(UserCreationForm):

class Meta(UserCreationForm.Meta):
    model = get_user_model()
    fields = ('email', 'password1', 'password2', 'is_staff','username','groups','first_name','last_name','departement')

Ответы [ 2 ]

1 голос
/ 21 июня 2020

сначала вы создаете decoratorsy.py в своем приложении, а затем добавляете следующий код в decorators.py

from django.http import HttpResponse
from django.shortcuts import redirect


def unauthenticated_user(view_func):
  def wrapper_func(request, *args, **kwargs):
    if request.user.is_authenticated:
        return redirect('url')
    else:
        return view_func(request, *args, **kwargs)

return wrapper_func


 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 == 'GroupName':
        return redirect('url')


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

return wrapper_function

views.py

def createuser(request):
form = CreateUserForm()
if request.method == 'POST':
    form = CreateUserForm(request.POST)
    if form.is_valid():
        form.save()
        user = form.save()
        username = form.cleaned_data.get('username')
        group = Group.objects.get(name='GroupName')
        user.groups.add(group)
        Customer.objects.create(
            user=user, )

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

        return redirect('login')

context = {'form': form}
return user

on ваш views.py вы добавляете @allowed_users (allowed_roles = ['GROUPNAME']) для разрешения, эта группа видит следующие вещи

0 голосов
/ 21 июня 2020

Я просто добавляю несколько строк кода в Views.py, когда добавляю пользователя:

def createView(request):
form=FormAddAccount()
if request.method=="POST":
    form=FormAddAccount(request.POST)
    if form.is_valid():
        user=form.save()
        for element in form.cleaned_data["groups"] :
            group = Group.objects.get(name=element)
            user.groups.add(group)
        user.save()
        redirect("accounts/list.html")
context={
    'form':form
}

return render(request,"accounts/addaccount.html",context)
...