具有权限组的Django身份验证用户(注册)

时间:2020-08-10 11:17:03

标签: python django

如果我注册了django auth用户,该怎么办?如果该用户注册,他们创建的帐户将自动注册到“客户端”权限组中。

这是我的views.py

class SignUpView(CreateView):
    form_class = SignUpForm
    group = Group.objects.get(name='client')
    user.groups.add(group) ==> it didnt work
    success_url = reverse_lazy('loginpage')
    template_name = 'customAdmin/signup.html'

forms.py

class SignUpForm(UserCreationForm):
    first_name = forms.CharField(max_length=30,  help_text='Optional')
    last_name = forms.CharField(max_length=30,  help_text='Optional')
    email = forms.EmailField(max_length=254, required=False, help_text='Optional')

    class Meta:
        model = User
        fields = [
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2',
            ]

这是我的html

{% block 'base.html' %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Sign-Up</title>
</head>
<body>


{% block title %}Sign Page{% endblock title %}

{% block content %}
    <h2>Sign Page</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Register</button>
        <br><br>
        <a href="{% url 'loginpage' %}">Login</a>
    </form>
{% endblock content %}
</body>
{% endblock %}
</html>

提前感谢:)

编辑:我正在使用Django 2.2.4

1 个答案:

答案 0 :(得分:1)

我认为您应该改变看法

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            group = Group.objects.get(name='client')
            user = form.save()
            user.groups.add(group)
            user.refresh_from_db() #this will refresh your db
            user.profile.firstname = form.cleaned_data.get('firstname')
            user.profile.lastname = form.cleaned_data.get('lastname')
            user.profile.email = form.cleaned_data.get('email')
            user.profile.save()
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=user.username, password=raw_password)
            login(request, user)
            return redirect('loginpage')
    else:
        form = SignUpForm()
    return render(request, 'customAdmin/signup.html', {'form': form})

和您的表格。py

class SignUpForm(UserCreationForm):
    firstname = forms.CharField(max_length=30,  help_text='Optional')
    lastname = forms.CharField(max_length=30,  help_text='Optional')
    email = forms.EmailField(max_length=254, required=False, help_text='Optional')

    class Meta:
        model = User
        fields = [
            'username',
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2',
            ]