2017-08-20 21 views

回答

1

我建議你創建一個自定義裝飾器來做到這一點,爲什麼?因爲我認爲這種方法很容易理解如何使用組而不是使用權限。

一個例子,你yourapp/decorators.py

你可以看到,在這裏,我們重點if ... request.user.groups.filter(name='moderator')處理組。

from django.shortcuts import render 

def moderator_login_required(function): 
    def wrap(request, *args, **kwargs): 
     if request.user.is_authenticated() \ 
       and request.user.groups.filter(name='moderator').exists(): 
      return function(request, *args, **kwargs) 
     else: 
      context = { 
       'title': _('403 Forbidden'), 
       'message': _('You are not allowed to access this page!') 
      } 
      # you can also return redirect to another page here. 
      return render(request, 'path/to/error_page.html', context) 
    wrap.__doc__ = function.__doc__ 
    wrap.__name__ = function.__name__ 
    return wrap 

浩在views.py使用?

from yourapp.decorators import moderator_login_required 

@moderator_login_required 
def dashboard(request): 
    #do_stuff 

或者,如果你與CBV (類Bassed查看)工作,你可以使用@method_decorator,如:

from django.views.generic.base import TemplateView 
from django.utils.decorators import method_decorator 

from yourapp.decorators import moderator_login_required 

class DashboardView(TemplateView): 

    @method_decorator(moderator_login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(DashboardView, self).dispatch(*args, **kwargs) 

希望它有幫助..

+0

嘿它是有點兒工作,然而'request.user'指的是超級用戶'admin'用戶,而不是我認證的用戶。我在這裏做錯了什麼? – notalentgeek

+0

沒關係,它正在工作,我做了'authenticate()',但我沒有使用'login()'登錄。 Terimakasih! – notalentgeek