ClassBasedViewで使えるMixinを集めたdjango-bracesを試す

この間、ClassBasedViewにデコレータを適用する方法を幾つか試してて、例としてlogin_requiredデコレータを使ってたんですが、その流れで、login_requiredをMixinで行うライブラリを見つけたので試してみました。


django-braces
Welcome to django-braces’s documentation! ― django-braces 0.2.3 documentation


login_requiredだけでなくて、ClassBasedViewで使えるMixinがいろいろ用意されてます。


とりあえずLoginRequiredMixinの例

from django.views.generic import TemplateView
from braces.views import LoginRequiredMixin


class MyPageView(LoginRequiredMixin, TemplateView):
    template_name = 'apps/mypage.html'

    #optional
    login_url = "/signup/"
    redirect_field_name = "hollaback"
    raise_exception = True    

こんな感じです。raise_exception=Trueにすると、login_urlにリダイレクトせず、403を返すようになります。
LoginRequiredMixinは一番左側に記述する必要があるようです。

class LoginRequiredMixin(AccessMixin):
    """
    View mixin which verifies that the user is authenticated.

    NOTE:
        This should be the left-most mixin of a view.
    """

他にもいろいろなmixinがあるので、そのうち全部試してみようと思います。