Django:class 基于视图注销用户如果不是员工
Django: class based view logout user if not staff
我是 Django 的新手,我正在尝试使用 PermissionRequiredMixin
在访问页面之前验证经过身份验证的用户是否 staff
,如果他未经过身份验证,则视图重定向用户到登录页面,在这个页面上加载了一个来自 django.contrib.auth.views.login
的表单,好的。但是,如果用户已通过身份验证但他不是 staff
,则在重定向时他将不会在登录页面上显示任何表单。
我该怎么办?如果用户在尝试访问仅限员工的页面时不是员工,则注销用户?如果是,我如何使用 CBV
和 TemplateView
来做到这一点?
查看
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)(适用于 POST
、GET
和其他请求方法)。
我是 Django 的新手,我正在尝试使用 PermissionRequiredMixin
在访问页面之前验证经过身份验证的用户是否 staff
,如果他未经过身份验证,则视图重定向用户到登录页面,在这个页面上加载了一个来自 django.contrib.auth.views.login
的表单,好的。但是,如果用户已通过身份验证但他不是 staff
,则在重定向时他将不会在登录页面上显示任何表单。
我该怎么办?如果用户在尝试访问仅限员工的页面时不是员工,则注销用户?如果是,我如何使用 CBV
和 TemplateView
来做到这一点?
查看
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)(适用于 POST
、GET
和其他请求方法)。