前回の続きで、くじ引きアプリを作成していきます。
【前回のまとめ】
・サインアップ画面を作成する
【今回の作業】
・ユーザがログイン時にだけ投稿や編集・削除できるようにする
現在の状態ではログインしなくても投稿などができてしまいます。
このままだとログインの意味がないため、今回はユーザがログイン時にだけ投稿や編集・削除できるようにしたいと思います。
設定は今までの差分を利用しますので、初めから設定したい方は以下記事を参照してください。
ユーザがログイン時にだけ投稿や編集・削除できるようにする
【手順】
1.tdl_list.htmlを修正
まずは一覧画面のナビゲーションバーにログインリンクを追加するため、共通テンプレートを変更します。
ファイル:myapptdl>tdl>templates>tdl>tdl_list.html
コード:
{% extends 'layout.html' %} #修正
共通テンプレートをbase.htmlからlayout.htmlに変更しています。
2.views.pyを修正
次はログイン時にだけ、各操作ができるようにコードを修正していきます。
ファイル:myapptdl>tdl>views.py
コード:
from django.urls import reverse_lazy from django.views import generic from .models import Tdl import random from django.contrib.auth.mixins import LoginRequiredMixin #追加 class IndexView(generic.ListView): model = Tdl class ExecutionView(LoginRequiredMixin, generic.ListView): #修正 model = Tdl template_name = 'tdl/tdl_execution.html' def get_queryset(self): # return Tdl.objects.order_by('?')[:1] pk = Tdl.objects.values_list('pk', flat=True) pk_list = list(pk) pk_random = random.choice(pk_list) queryset = Tdl.objects.filter(pk=pk_random) return queryset class CreateView(LoginRequiredMixin, generic.edit.CreateView): #修正 model = Tdl fields = '__all__' class UpdateView(LoginRequiredMixin, generic.edit.UpdateView): #修正 model = Tdl fields = '__all__' class DeleteView(LoginRequiredMixin, generic.edit.DeleteView): #修正 model = Tdl success_url = reverse_lazy('tdl:index')
まず「LoginRequiredMixin」クラスモジュールをインストールしています。
このクラスを継承することによって、利用するクラスに遷移する場合はログインが必要になります。
使い方は、クラスの継承リストの一番左に「LoginRequiredMixin」を追記するだけです。
詳しくはこちら
今回は実行画面、新規作成画面、更新画面、削除画面のクラスに追加しました。
以上で設定は終わりなので、サーバを起動して確認します。
cd myapp python manage.py runserver
次の手順で確認していきます。
- 以下URLにブラウザでアクセスする
http://localhost:8000/tdl - 一覧画面のナビゲーションバーの上に「Login」や「Sign up」リンクが表示されています
- 以下のリンクをクリックして、ログイン画面に遷移するかを確認する
・新規作成
・実行
・編集
・削除 - 続いてログインした時に動作するかを確認する
・新規作成
・実行
・編集
・削除
確認した結果を動画に取りました。
以上で今回の目的であるログイン時にだけ操作できるうようにすることができました。
次回はログイン状態の時だけ新規投稿・実行・編集・削除のリンクを表示させるようにしてみます。
ありがとうございました。
【参考にしたサイトと本】
コメント