Django 指定用户角色时呈现或重定向
我正在使用django构建应用程序(请注意,我对django非常陌生)。我想从此现有视图添加重定向 视图中的对象:Django 指定用户角色时呈现或重定向,django,django-views,django-permissions,Django,Django Views,Django Permissions,我正在使用django构建应用程序(请注意,我对django非常陌生)。我想从此现有视图添加重定向 视图中的对象: from core.views import generic class ListViewPublic(generic.ListView): pass class BookListView(ListViewPublic): model = Book def get_queryset(self): filter_kwargs = {
from core.views import generic
class ListViewPublic(generic.ListView):
pass
class BookListView(ListViewPublic):
model = Book
def get_queryset(self):
filter_kwargs = {
'status': Book.STATUS.public,
}
return Book.objects.filter(**filter_kwargs)
def get_context_data(self, **kwargs):
context = super(BookListView, self).get_context_data(**kwargs)
form = SearchForm(load_all=True)
context.update({'form': form})
return context
e、 g
- 如果用户未登录,则应显示该页面
- 如果用户的角色为阅读器,则应呈现页面
- 如果用户的角色是作者,则应将其重定向到url
from django.utils.decorators import method_decorator
from django.template import RequestContext, Context
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, redirect, render
def custom_login_required(f):
def wrap(request, *args, **kwargs):
"""
this will check user is logged in , if not it will redirect to login page
"""
if request.user.is_authenticated() and request.user.user_profile.role=='author':
return HttpResponseRedirect('/author')
else:
return render_to_response('index.html', locals(), context_instance=RequestContext(request))
return f(request, *args, **kwargs)
wrap.__doc__ = f.__doc__
wrap.__name__ = f.__name__
return wrap
@method_decorator(custom_login_required)
def get_context_data(self, **kwargs):
context = super(BookListView, self).get_context_data(**kwargs)
form = SearchForm(load_all=True)
context.update({'form': form})
return context
上面写着,获取上下文数据,比如这样
from django.utils.decorators import method_decorator
from django.template import RequestContext, Context
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, redirect, render
def custom_login_required(f):
def wrap(request, *args, **kwargs):
"""
this will check user is logged in , if not it will redirect to login page
"""
if request.user.is_authenticated() and request.user.user_profile.role=='author':
return HttpResponseRedirect('/author')
else:
return render_to_response('index.html', locals(), context_instance=RequestContext(request))
return f(request, *args, **kwargs)
wrap.__doc__ = f.__doc__
wrap.__name__ = f.__name__
return wrap
@method_decorator(custom_login_required)
def get_context_data(self, **kwargs):
context = super(BookListView, self).get_context_data(**kwargs)
form = SearchForm(load_all=True)
context.update({'form': form})
return context
嗨@Pawan谢谢你的访问和回答。我在文件顶部添加了
custom\u login\u required
,然后将@method\u decorator
放在get\u context\u data
上方,但我得到了错误wrap()至少接受一个参数(给定0)
。有线索吗?