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

问题描述 投票:1回答:1

我是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')
python django django-views django-class-based-views
1个回答
1
投票

试试这个混音:

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属性(用户类)(适用于POSTGET和其他请求方法)。

© www.soinside.com 2019 - 2024. All rights reserved.