【发布时间】:2021-05-03 14:31:59
【问题描述】:
我的views.py 混合了def 和ClassViews:
@login_required(login_url='login')
@allowed_users(allowed_roles=['Admin', 'Staff', 'Lite Scan'])
def litescan(request):
filteredOutput = Stock.objects.all()
val = {}...
@method_decorator(login_required(login_url='login'), name='dispatch')
class HomeView(ListView):
model = Post
template_name = 'community.html'
ordering = ['-id']
如果有帮助,这里是我的decorators.py:
from django.shortcuts import redirect
from django.http import HttpResponseRedirect
def unauthenticated_user(view_func):
def wrapper_func(request, *args, **kwargs):
if request.user.is_authenticated:
return redirect('home')
else:
return view_func(request, *args, **kwargs)
return wrapper_func
def allowed_users(allowed_roles=[]):
def decorator(view_func):
def wrapper_func(request, *args, **kwargs):
group = None
if request.user.groups.exists():
group = request.user.groups.all()[0].name
if group in allowed_roles:
return view_func(request, *args, **kwargs)
else:
url = ('/forbidden')
return HttpResponseRedirect(url)
return wrapper_func
return decorator
我发现@login_required 和@allowed_users 在与ClassView 一起使用时会出错。所以我使用了@method_decorator,它在重定向到页面之前将我带到了登录页面。但是,我无法通过我的ClassView 来限制对某些组的访问,例如Admin、Staff、Lite Scan。
我们将不胜感激。谢谢!
【问题讨论】:
标签: python django django-views