Sah*_*jad 2 django login-required django-class-based-views
我在 Django 中使用基于类的视图。@login_required 装饰器没有重定向到登录页面。它仍然显示个人资料页面。
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)
Run Code Online (Sandbox Code Playgroud)
谁能帮我。我是 Django 新手,任何帮助将不胜感激。
提前致谢
您需要method_decorator先应用一个,然后将其传递给login_required函数装饰器。
类上的方法与独立函数完全相同,因此您可以仅将函数装饰器应用于该方法。您需要首先将其转换为方法装饰器。
\n\n为了更清楚地说明,Django 的视图装饰器返回一个带有签名的函数(request, *args, **kwargs),但对于基于类的视图,签名应采用(self, request, *args, **kwargs). 现在,它所做的method_decorator是将第一个签名转换为第二个签名。
来自有关装饰基于类的视图的文档:
\n\n\n\n\n装饰
\nmethod_decorator器将函数装饰器转换为方法装饰器,以便可以在实例方法上使用它。
from django.contrib.auth.decorators import login_required\nfrom django.utils.decorators import method_decorator\n\nclass ProfileView(TemplateView):\n template_name=\'profile.html\'\n\n @method_decorator(login_required(login_url=\'/accounts/login/\'))\n def dispatch(self, *args, **kwargs):\n return super(ProfileView, self).dispatch(*args, **kwargs)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3769 次 |
| 最近记录: |