Djangoクラスベースビューにログイン制限をかけ、リダイレクトも行う
クラスベースビューは、mixin.pyで別にデコレーター的なクラスをまとめておくと便利
mixin.pyで別にクラスを整理しておき、views.pyにインポートさせるのが可読性を高められるのでオススメ。
""" views.py """ from .mixin import * class MyhogeListView(LoginRequiredMixin, ListView):
ログイン制限をかけるだけで404エラーを返すmixin
ログイン制限をかけるだけで404エラーを返すmixinはこんな感じ。
"""
mixin.py
"""
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class LoginRequiredMixin(object):
@method_decorator(login_required)
def dispatch(self, request, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
mixinでログイン制限をかけてリダイレクトも設定するには
関数ベースのlogin_requiredのリダイレクト設定のときと同じ。で一文追加するだけ。便利。
"""
mixin.py
"""
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class LoginRequiredMixin(object):
@method_decorator(login_required(login_url = '/accounts/login/')) #ここがかわった
def dispatch(self, request, *args, **kwargs):
return super(LoginRequiredMixin, self).dispatch(request, *args, **kwargs)
以上