Django LoginRequiredMixinの使い方|実例付

※本サイトにはプロモーション・広告が含まれています。

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

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

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

当記事を通じて、

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

をご紹介します。

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

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

✔独学におすすめ

運営者プロフィール

運営者プロフィールアイコン

現在はIT企業のプロダクトマネージャーとして、個人向け/社内向けシステムなど、複数のシステム開発・運営に携わっています。

Webサイト構築やECサイトの開発経験に加えて、PythonなどのプログラミングやSalesforceなどのクラウドアプリケーションに関する幅広い知識・経験を活かして「プログラミング初心者がスムーズに学べるサイト」を目指しています。

Githubでは、趣味で作成したアプリなどを公開しています。

https://github.com/Yulikepython/

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

【クラスベースビュー】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を使い、独自にアクセスを制限するクラスを作成する方法について解説します

タイトルとURLをコピーしました