0

我正在尝试login_required在 django 视图之外使用装饰器。我在我的实用程序的一个函数中使用它。

@login_required
def somefunc():
    #logic

然后我认为这somefunc()

class MyView(View):
    def get(self, request, *args, **kwargs):
         my_func = Somefunc()

当我这样做时,它说object has no attribute 'user' 这里有什么问题?

4

2 回答 2

1

login_required正在寻找一个请求对象作为装饰视图函数的第一个参数。请求对象有一个user属性,然后检查该属性以查看用户是否实际登录。您不能使用此装饰器包装任意函数并期望它与实际视图函数完全相同。

于 2015-07-13T07:34:21.937 回答
0

您应该login_requiredView. 这可以通过覆盖该dispatch方法来实现。

class MyView(View):
    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super(MyView, self).dispatch(*args, **kwargs)

您可以创建自己的 mixin 来实现这一点,或者只使用django-braces's LoginRequiredMixin

如果您想在函数中进行此检查,最好PermissionDeniedsomefunc.

无论哪种方式,您都需要request/ userinsomefunc

于 2015-07-13T07:27:14.570 回答