(最終更新月:2021年12月)
「ページへのアクセスをログインユーザーのみに制限したい!」
という方へ向けたDjango初学者向けの記事となります。
当記事を通じて、
- 「LoginRequiredMixin」の書き方
- 実際のコード例
をご紹介します。
現在開発中の日報アプリでは、ユーザーがログインしていない状態で新規作成をすると下記の通りエラーとなります。
ユーザーがログインしていない場合はログインページへ進むよう設定していきます。
✔YouTube解説動画
当記事の内容は動画を見ながら進めると、約15分程度で完了します。
動画ならではの情報も解説しているので、記事と一緒にご覧ください。
動画の概要欄には、単元ごとのコードを紹介しているgithubページも載せています。
【クラスベースビュー】LoginRequiredMixinの書き方
書き方のポイントとしておさえとくのは
- インポート
- クラスの継承
という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も、
などと、ログイン後には元いたページへ戻る設定もされています。
まとめ
「ユーザーがログインしている場合だけ表示したい!」という場合は、クラスベースビューでは「LoginRequiredMixin」を使うと効果的です。
- LoginRequiredMixinのインポート
- クラスの継承
という流れを覚えておきましょう!
さて、CreateViewについてはログインユーザーでの制限で十分ですが、UpdateView、DeleteView、についてはいかがでしょうか?
ログインしているからって他の人の日報まで編集、削除できても困りますよね?
次回は、UserPassesTestMixinを使い、独自にアクセスを制限するクラスを作成する方法について解説します