Python 如何在django类视图中将请求对象传递给方法_decorator?
我整天都在做这个 我正在尝试为类视图编写自定义权限,以检查用户是否在某个权限组中Python 如何在django类视图中将请求对象传递给方法_decorator?,python,django,Python,Django,我整天都在做这个 我正在尝试为类视图编写自定义权限,以检查用户是否在某个权限组中 def rights_needed(reguest): if request.user.groups.filter(Q(name='Admin')).exists(): pass else: return HttpResponseRedirect('/account/log-in/') @method_decorator(rights_needed, name='dispatch') cl
def rights_needed(reguest):
if request.user.groups.filter(Q(name='Admin')).exists():
pass
else:
return HttpResponseRedirect('/account/log-in/')
@method_decorator(rights_needed, name='dispatch')
class AdminView(CreateView):
model = Admin
form_class = AdminForm
def get_template_names(self):
return 'clinic/visitform_list.html'
你能帮我知道怎样才能做到这一点吗?还是更简单的方法
我还尝试了以下方法(AdminView类中的代码):
decorator是一个函数,它接受一个函数(本例中为视图),并返回另一个函数(本例中为视图)。目前,您所需的
权限看起来像一个常规视图-它返回的是响应而不是函数
Django提供了一个user\u passes\u test
方法,可以轻松创建这样的装饰器。因为您使用的是基于类的视图,所以使用mixin就更容易了
您对mixin的测试功能是:
def test_func(self):
return self.request.user.groups.filter(Q(name='Admin')).exists()
第二个代码段应该可以工作,尽管它需要接受*args、**kwargs
。尝试时会发生什么?*args未定义,因此我将def dispatch(self,request)
更改为def dispatch(self,request,*args,**kwargs)。
这导致错误dispatch()缺少1个必需的位置参数:“request”
,因此我使用return super().dispatch(request,*args,**kwargs)
谢谢。除非你说它会起作用,否则我是不会看到这个错误的。我已经放弃了这种方法。我修正了错误,但你的回答很圆滑。
def test_func(self):
return self.request.user.groups.filter(Q(name='Admin')).exists()