Django

Django LoginRequiredMixinの使い方|実例付

light

(最終更新月:2021年12月)

「ページへのアクセスをログインユーザーのみに制限したい!」

という方へ向けたDjango初学者向けの記事となります。

当記事を通じて、

  • 「LoginRequiredMixin」の書き方
  • 実際のコード例

をご紹介します。

現在開発中の日報アプリでは、ユーザーがログインしていない状態で新規作成をすると下記の通りエラーとなります。

ユーザーがログインしていない場合はログインページへ進むよう設定していきます。

✔独学におすすめ

【クラスベースビュー】LoginRequiredMixinの書き方

書き方のポイントとしておさえとくのは

  1. インポート
  2. クラスの継承

という2つになります。

from django.contrib.auth.mixins import LoginRequiredMixin

でインポートし、

class クラス名(LoginRequiredMixin, 他継承元):
    ...
    ...

と進めます。

クラス継承の際は、LoginRequiredMixinを最前にもってくるようにしよう!

コード例

from django.contrib.auth.mixins import LoginRequiredMixin

class NippoCreateFormView(LoginRequiredMixin, CreateView):
    template_name = "nippo/nippo-formclass.html"
    form_class = NippoModelForm
    success_url = reverse_lazy("nippo-list")

    def get_form_kwargs(self):
        kwgs = super().get_form_kwargs()
        kwgs["user"] = self.request.user
        return kwgs

ログインをしていない状態で直接CreateViewのURLを打ち込みページへ進んでみよう!

自動的にログイン画面へリダイレクトしてくれます。

また、その際のURLも、

http://localhost:8000/accounts/login/?next=/nippo/create/

などと、ログイン後には元いたページへ戻る設定もされています。

まとめ

「ユーザーがログインしている場合だけ表示したい!」という場合は、クラスベースビューでは「LoginRequiredMixin」を使うと効果的です。

  1. LoginRequiredMixinのインポート
  2. クラスの継承

という流れを覚えておきましょう!

さて、CreateViewについてはログインユーザーでの制限で十分ですが、UpdateViewDeleteView、についてはいかがでしょうか?

ログインしているからって他の人の日報まで編集、削除できても困りますよね?

次回は、UserPassesTestMixinを使い、独自にアクセスを制限するクラスを作成する方法について解説します