Django:class 基于视图注销用户如果不是员工

Django: class based view logout user if not staff

我是 Django 的新手,我正在尝试使用 PermissionRequiredMixin 在访问页面之前验证经过身份验证的用户是否 staff,如果他未经过身份验证,则视图重定向用户到登录页面,在这个页面上加载了一个来自 django.contrib.auth.views.login 的表单,好的。但是,如果用户已通过身份验证但他不是 staff,则在重定向时他将不会在登录页面上显示任何表单。

我该怎么办?如果用户在尝试访问仅限员工的页面时不是员工,则注销用户?如果是,我如何使用 CBVTemplateView 来做到这一点?

查看

from django.contrib.auth.mixins import PermissionRequiredMixin
# ...
class AdminView(PermissionRequiredMixin, TemplateView):
    permission_required = 'is_staff'
    template_name = 'checkout/admin.html'

登录URL

from django.contrib.auth.views import login
# ...
url(r'^entrar/$', login, {'template_name': 'accounts/login.html'}, name='login')

试试这个混音:

from django.contrib.auth.mixins import LoginRequiredMixin, AccessMixin
from django.contrib.auth import logout

class LogoutIfNotStaffMixin(AccessMixin):
        def dispatch(self, request, *args, **kwargs):
            if not request.user.is_staff:
                logout(request)
                return self.handle_no_permission()
            return super(LogoutIfNotStaffMixin, self).dispatch(request, *args, **kwargs)

使用方法如下:

class AdminView(PermissionRequiredMixin, LogoutIfNotStaffMixin, TemplateView):
    permission_required = 'is_staff'
    template_name = 'checkout/admin.html'

此 mixin 在调度方法中验证 is_staff 属性(用户 class)(适用于 POSTGET 和其他请求方法)。