MawaLog

一日一日、楽しく生きる。技術と音楽が好き。

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)

以上