django login_required装饰外部视图

时间:2015-07-13 07:18:56

标签: python django view login-required

我正在尝试在django视图外使用login_required装饰器。 我在我的utils函数中使用它。

@login_required
def somefunc():
    #logic

然后我在我的视图中调用此somefunc()

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您应该在login_required上添加View装饰器。这可以通过覆盖dispatch方法来实现。

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

您可以创建自己的mixin来实现这一目标,或者只使用django-bracesLoginRequiredMixin

如果您希望对此功能进行此检查,最好在PermissionDenied中引发somefunc例外。

无论哪种方式,您都需要request中的user / somefunc