Django@login_不需要重定向到登录页面

Django@login_不需要重定向到登录页面,django,django-class-based-views,login-required,Django,Django Class Based Views,Login Required,我在Django中使用基于类的视图@登录所需的装饰程序没有重定向到登录页面。它仍然显示个人资料页面 class ProfileView(TemplateView): template_name='profile.html' @login_required(login_url='/accounts/login/') def dispatch(self, *args, **kwargs): return super(ProfileView, self).dispatch(*args

我在Django中使用基于类的视图@登录所需的装饰程序没有重定向到登录页面。它仍然显示个人资料页面

class ProfileView(TemplateView):
template_name='profile.html'

@login_required(login_url='/accounts/login/')
def dispatch(self, *args, **kwargs):
        return super(ProfileView, self).dispatch(*args, **kwargs)
有人能帮我吗。我是Django的新手,如有任何帮助,我将不胜感激


提前感谢

您需要先应用
方法\u decorator
,然后将所需的
登录\u传递给它
函数decorator。

类上的方法与独立函数并不完全相同,因此不能仅将函数装饰器应用于该方法首先需要将其转换为方法装饰器。

更清楚地说,Django的视图装饰器返回一个带有签名的函数
(request,*args,**kwargs)
,但是对于基于类的视图,签名的形式应该是
(self,request,*args,**kwargs)
。现在,
方法\u decorator
所做的是将第一个签名转换为第二个签名

从现在起

方法\u decorator
decorator将函数decorator转换为 方法装饰器,以便可以在实例方法上使用


使用基于类的视图时,最好使用LoginRequiredMixin而不是@login\u required装饰器。它执行基本相同的功能

class ProfileView(LoginRequiredMixin,TemplateView):
模板\u name='profile.html'

感谢您的回复,但是它仍然没有重定向到登录页面。我也在设置中配置了
login\u URL
login\u REDIRECT\u URL
。这两个设置的值是什么?
login\u URL='/accounts/login/'login\u REDIRECT\u URL='/accounts/profile/'
我认为在设置中定义它不应该是一个问题。由于登录url与设置中定义的相同,因此可以执行
@method\u decorator(需要登录)
。如果用户未登录,它将重定向到
设置。LOGIN\u URL
。嗯,我正在尝试执行所需登录,但不要重定向到登录页面heheLoginRequiredMixin extends AccessMixin,该页面具有一个方法句柄\u no\u权限,当用户没有访问权限时会调用该权限。此方法检查名为raise_exception的类成员,该类成员默认为False。将此设置为True将引发错误,而不是重定向。类ProfileView(LoginRequiredMixin,TemplateView):template\u name='profile.html'引发\u异常=True
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

class ProfileView(TemplateView):
    template_name='profile.html'

    @method_decorator(login_required(login_url='/accounts/login/'))
    def dispatch(self, *args, **kwargs):
        return super(ProfileView, self).dispatch(*args, **kwargs)