LoginSignup
29
17

More than 5 years have passed since last update.

DjangoのLoginRequiredMixinについて

Last updated at Posted at 2018-08-07

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に飛ぶことになります。多重継承の問題っぽいのでわかったら追記します(もしくは詳しい方教えてください)

29
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
17