gpt4 book ai didi

python - 如何将请求对象传递给 Django 类 View 中的 method_decorator?

转载 作者:行者123 更新时间:2023-11-28 17:09:07 24 4
gpt4 key购买 nike

我整天都在研究这个。

我正在尝试为类 View 编写自定义权限,以检查用户是否在某个权限组中。

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/')

最佳答案

装饰器是一个接受一个函数(本例中为 View )并返回另一个函数(本例中为 View )的函数。目前,您的 rights_needed 看起来像一个常规 View - 它返回的是响应而不是函数。

Django 带有一个 user_passes_test 方法,可以很容易地创建这样的装饰器。由于您使用的是基于类的 View ,因此使用 UserPassesTest 会更容易。混入。

你的 mixin 测试函数是:

def test_func(self):
return self.request.user.groups.filter(Q(name='Admin')).exists()

关于python - 如何将请求对象传递给 Django 类 View 中的 method_decorator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48927800/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com