【问题标题】:Create a staff user in django在 django 中创建一个员工用户
【发布时间】:2018-07-30 10:29:47
【问题描述】:

我想用 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)

【问题讨论】:

  • 请修正您的代码 sn-p 缩进。
  • 您确定要让 所有 用户访问 django 管理员吗?

标签: python django


【解决方案1】:

你可以通过添加来做到这一点

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

【讨论】:

  • 是的,但是使用此代码,所有新用户都将成为员工。这不好。
  • 是的,我知道。他必须找到一种方法来限制它。
【解决方案2】:

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

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

python manage.py createsuperuser

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

【讨论】:

    【解决方案3】:

    我在一个单独的表单中添加了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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-24
      • 2019-06-30
      • 2019-03-26
      • 2019-05-28
      • 2011-03-30
      • 1970-01-01
      • 2023-04-04
      • 2020-02-26
      相关资源
      最近更新 更多