我建議你創建一個自定義裝飾器來做到這一點,爲什麼?因爲我認爲這種方法很容易理解如何使用組而不是使用權限。
一個例子,你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)
希望它有幫助..
嘿它是有點兒工作,然而'request.user'指的是超級用戶'admin'用戶,而不是我認證的用戶。我在這裏做錯了什麼? – notalentgeek
沒關係,它正在工作,我做了'authenticate()',但我沒有使用'login()'登錄。 Terimakasih! – notalentgeek