Django 中基于类的视图的身份验证

Ama*_*rma 6 django django-class-based-views

class AdminView(generic.ListView):
    model = get_user_model()
    fields = ['first_name', 'username', 'is_active']
    template_name = 'users/admin.html'

class AdminUpdateView(UpdateView):
    model = get_user_model()
    fields = ['is_active']
    template_name = 'users/user_update.html'
    success_url = reverse_lazy('users:admin')
Run Code Online (Sandbox Code Playgroud)

我在 django 中创建了两个视图,我希望只有在管理员/员工登录时才能访问它们。我该怎么做?

Wil*_*sem 16

您可以使用UserPassesTestMixin[Django-doc]LoginRequiredMixin[Django-doc]混合,并指定用户应该是is_superuser. 由于您需要两次,我们可以先制作一个复合 mixin:

from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin

class AdminStaffRequiredMixin(LoginRequiredMixin, UserPassesTestMixin):

    def test_func(self):
        return self.request.user.is_superuser or self.request.user.is_staff
Run Code Online (Sandbox Code Playgroud)

接下来,您可以将 mixin 添加到基于类的视图中:

class AdminView(AdminStaffRequiredMixin, generic.ListView):
    model = get_user_model()
    fields = ['first_name', 'username', 'is_active']
    template_name = 'users/admin.html'

class AdminUpdateView(AdminStaffRequiredMixin, UpdateView):
    model = get_user_model()
    fields = ['is_active']
    template_name = 'users/user_update.html'
    success_url = reverse_lazy('users:admin')
Run Code Online (Sandbox Code Playgroud)