在Django中创建职员用户

时间:2018-07-30 10:29:47

标签: python django

我想用django创建一个注册系统。 我创建了一个用户,该用户的类位于forms.py上,并扩展了UserCreationForm。 并且我运行服务器并填写表单并创建了用户,但是我无法在django的登录页面上用该用户登录,并且它说我该用户不是工作人员用户 如何使我的用户人员???

forms.py:

class ModelNameForm(UserCreationForm):

    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = (
            'username' ,
            'first_name' ,
            'last_name' ,
            'email' ,
            'password1' ,
            'password2'
        )

    def save(self, commit=True):
        user = super (ModelNameForm , self ).save(commit=False)
        user.first_name = self.cleaned_data ['first_name']
        user.last_name = self.cleaned_data ['last_name']
        user.email = self.cleaned_data ['email']

        if commit :
            user.save()

        return user

views.py:

def register (request):

    form = ModelNameForm (request.POST)

    if form.is_valid():
        form.save()
        return HttpResponseRedirect('/thanks')

    else:
        form = ModelNameForm()

        args = {'form' : form }
    return render(request , 'signup.html' , args)

3 个答案:

答案 0 :(得分:1)

您可以通过添加

user.is_staff = True在模型表单保存方法中

答案 1 :(得分:0)

您可以在ModelForm user.is_staff = True方法中添加save。但这不是安全,因为所有新用户都将成为staff用户,并且他们将有权访问您的管理页面。

更安全的方法是创建superuser并在您的管理员中手动授予其他用户访问权限。您可以通过以下方式创建超级用户:

python manage.py createsuperuser

然后,您可以使用超级用户凭据登录到django管理页面。如果需要授予用户权限,您必须使用超级用户帐户打开管理页面,然后单击Users并找到用户。打开此用户,然后单击复选框is staff

答案 2 :(得分:0)

我在单独的表单中添加了 user.is_staff = True 以创建员工用户,并使用另一个表单创建普通用户。这样我就可以防止所有新用户成为员工用户。

我正在使用自定义用户模型。 以下是创建员工用户的代码:

forms.py

class StaffCreationForm(forms.ModelForm):
"""
A Custom form for creating new staffs.
"""
    class Meta:
        model = get_user_model()
        fields = ['name','phone']

views.py

def register_staff(request):
if request.user.is_superuser: # giving access to superuser only.
    form = StaffCreationForm()
    if request.method == 'POST':
        form = StaffCreationForm(request.POST)
        if form.is_valid():

            phone = form.cleaned_data.get('phone') # obtaining data from fields.
            name = form.cleaned_data.get('name')

            user = User.objects.create_user(phone = phone, name = name) # assigning obtained data to model variables and save user as staff.
            user.is_staff=True
            user.save()

            message = ('%(name)s is added as a staff.') % {'name': name} # flash message for successful registration.
            messages.success(request, message)
            return redirect('staff')
    context = {'form':form}
    return render(request, 'registration/add_staff.html', context)
else:
    return render(request, 'error-404.html')

urls.py

urlpatterns = [
    path('add_staff', register_staff, name = 'staff'),
]

add_staff.html

<form method="POST">
    {% csrf_token %}
        {% for message in messages %}
            {% if message.tags %}
                <div class="alert alert-{{message.tags}}">
                    {{message}}
                </div>
            {% endif %}
        {% endfor %}
    {{ form|crispy }}
    <input type="submit" class="btn btn-primary" value="Add Staff">
</form>