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があるので、そのうち全部試してみようと思います。