見出し画像

Django 一括でログイン必須にする方法

ログイン機能作った後に他のHTMLをログインしたあとだけに表示したいと思いまして調べてると一括でする方法を発見。ここにメモしておきます。

クラスビューの場合from django.contrib.auth.mixins import LoginRequiredMixinでLoginRequiredMixinに継承してログイン必須にするという紹介が多いと思います。

それだとすべてのクラスビューにつけなければいけなくなりつけ忘れが発生したら大変です。

なので一括適用させたいと思います。

GlobalLoginRequiredMiddlewareを使用する

GlobalLoginRequiredMiddlewareという便利なモジュールがあります。これを使って一括適用させたいとおもいます。

まずはモジュールをつかうためにインストールを行います。

pip install django-glrm


そしてsettings.pyのMIDDLEWAREにglobal_login_required.GlobalLoginRequiredMiddlewareを追加します。

MIDDLEWARE = [
   'django.middleware.security.SecurityMiddleware',
   'django.contrib.sessions.middleware.SessionMiddleware',
   'django.middleware.common.CommonMiddleware',
   'django.middleware.csrf.CsrfViewMiddleware',
   'django.contrib.auth.middleware.AuthenticationMiddleware',
   'django.contrib.messages.middleware.MessageMiddleware',
   'django.middleware.clickjacking.XFrameOptionsMiddleware',
   'social_django.middleware.SocialAuthExceptionMiddleware',
   'global_login_required.GlobalLoginRequiredMiddleware', #追加
]


そしてsetting.pyにPUBLIC_PATHSを追加してログインしてなくても表示させたいページを指定します。

PUBLIC_PATHS = [
   '/login/',  
   '/create/',
   '/top/',
]

これで指定したもの以外ログイン必須になりました。👏

 

この記事が気に入ったらサポートをしてみませんか?