我一整天都在努力。
我正在尝试为类视图编写自定义权限,以检查用户是否属于某组权限。
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类中的代码):
def dispatch(self, request):
if request.user.groups.filter(Q(name='Admin')).exists():
return super().dispatch(*args, **kwargs)
else:
return HttpResponseRedirect('/account/log-in/')
答案 0 :(得分:2)
装饰器是一个函数,它接受一个函数(在这种情况下是一个视图),并返回另一个函数(在这种情况下是一个视图)。目前你的rights_needed
看起来像一个常规视图 - 它返回的是一个响应,而不是一个函数。
Django附带了user_passes_test
方法,可以轻松创建这样的装饰器。由于您使用的是基于类的视图,因此使用UserPassesTest
mixin会更容易。
mixin的测试功能是:
def test_func(self):
return self.request.user.groups.filter(Q(name='Admin')).exists()