Max*_*ian 3 python django django-views django-class-based-views
我是 Django 新手,我正在尝试使用 来PermissionRequiredMixin验证经过身份验证的用户是否staff在访问页面之前,如果他没有经过身份验证,则视图会将用户重定向到登录页面,在此页面上加载一个表单django.contrib.auth.views.login, 好的。但是,如果用户已通过身份验证而他未通过身份验证staff,则重定向时他在登录页面上不会有任何表单。
我应该怎么办?当用户尝试访问仅限员工页面时,如果用户不是员工,请注销该用户?如果是,我该如何使用CBVwith来做到这一点TemplateView?
看法
from django.contrib.auth.mixins import PermissionRequiredMixin
# ...
class AdminView(PermissionRequiredMixin, TemplateView):
permission_required = 'is_staff'
template_name = 'checkout/admin.html'
Run Code Online (Sandbox Code Playgroud)
登录网址
from django.contrib.auth.views import login
# ...
url(r'^entrar/$', login, {'template_name': 'accounts/login.html'}, name='login')
Run Code Online (Sandbox Code Playgroud)
小智 6
试试这个混合:
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)
Run Code Online (Sandbox Code Playgroud)
要使用它,请执行以下操作:
class AdminView(PermissionRequiredMixin, LogoutIfNotStaffMixin, TemplateView):
permission_required = 'is_staff'
template_name = 'checkout/admin.html'
Run Code Online (Sandbox Code Playgroud)
此 mixin 验证is_staff调度方法中的属性(User 类)(适用于POST和GET其他请求方法)。