Django LoginRequiredMixinの使い方|実例付

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

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

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

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

当記事を通じて、

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

をご紹介します。

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

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

✔YouTube解説動画

当記事の内容は動画を見ながら進めると、約15分程度で完了します。

動画ならではの情報も解説しているので、記事と一緒にご覧ください。

動画の概要欄には、単元ごとのコードを紹介しているgithubページも載せています。

✔独学におすすめ

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

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

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

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

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

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

【クラスベースビュー】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をコピーしました