2

I am using class based views in Django. @login_required decorator is not redirecting to login page. It still shows the profile page.

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)

Can anyone help me. I m new to Django and any help would be appreciated.

Thanks in advance

4

2 に答える 2

4

最初に を適用してから、関数デコレータmethod_decoratorに渡す必要があります。login_required

クラスのメソッドはスタンドアロン関数とまったく同じではないため、関数デコレータをメソッドに適用することはできません。最初にメソッド デコレータに変換する必要があります。

より明確にするために、Django のビュー デコレータは署名付きの関数を返します(request, *args, **kwargs)が、クラス ベースのビューの場合、署名は(self, request, *args, **kwargs). が行うことmethod_decoratorは、最初の署名を 2 番目の署名に変換することです。

クラスベースのビューの装飾に関するドキュメントから:

デコレーターはmethod_decorator、関数デコレーターをメソッド デコレーターに変換して、インスタンス メソッドで使用できるようにします。

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)
于 2015-08-11T18:42:21.330 に答える