我正在尝试在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'
这是什么问题?
答案 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-braces
的LoginRequiredMixin
。
如果您希望对此功能进行此检查,最好在PermissionDenied
中引发somefunc
例外。
无论哪种方式,您都需要request
中的user
/ somefunc