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()