2017-06-03 76 views
1

我是新來的Django,我試圖使用PermissionRequiredMixin來驗證如果認證的用戶是訪問頁面前的工作人員,如果他未驗證視圖重定向用戶登錄頁面,在這個頁面上加載了一個來自django.contrib.auth.views.login的表單,ok。但是,如果用戶通過身份驗證,並且他不是員工,那麼在重定向時,他將不會在登錄頁面上有任何表單。我該怎麼辦?當他嘗試訪問員工唯一頁面時,如果他不是員工,則註銷用戶?如果是的話,我該如何使用TemplateView使用CBV來做到這一點?Django:基於類的視圖註銷用戶,如果不是工作人員

查看

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

登錄網址

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

permission_required的值是否應該是格式爲''.' '? – zaidfazil

+0

@FazilZaid是的,我想知道如何做到這一點,我試過這種方式,後來我在文檔中看到了正確的方法,但我不知道'is_staff''是如何運作的。 –

+0

你能顯示登錄視圖嗎? – zaidfazil

回答

0

試試這個混入:

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屬性(User類)(適用於請求方法POST,GET和其他)。