Abstract
djangoのauth関連を書くことが多くて、戸惑うことが多い。
Userにログインを促すためには、DjangoではLoginRequiredMixinを使う必要がある。
適当に継承していたら詰まったので残しておく。
Prerequisite
OS: macOS
Python: 3.6.4
Django: 2.1
Situation
ユーザーがindex.htmlにアクセスした時に、user.is_authenticated == Trueになっていなければログイン画面に遷移するという処理を書きたい時に、私は以下のように書いていました。
from django.views.generic import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin
# このViewがうまく動いてくれない
class ViewA(TemplateView, LoginRequiredMixin):
template_name = 'index.html'
login_url = '/login/'
Conclusion
解決策としては、継承の順番を変更すれば良いでした。
from django.views.generic import TemplateView
from django.contrib.auth.mixins import LoginRequiredMixin
class ViewB(LoginRequiredMixin, TemplateView):
template_name = 'index.html'
login_url = '/login/'
そうすると、index.htmlにアクセスした時に、loginに飛ぶことになります。多重継承の問題っぽいのでわかったら追記します(もしくは詳しい方教えてください)