Djangoでくじ引きアプリを作ってみる_part10

lottery-146318_1280.png Django

前回の続きで、くじ引きアプリを作成していきます。

【前回のまとめ】

・サインアップ画面を作成する

【今回の作業】

・ユーザがログイン時にだけ投稿や編集・削除できるようにする

現在の状態ではログインしなくても投稿などができてしまいます。
このままだとログインの意味がないため、今回はユーザがログイン時にだけ投稿や編集・削除できるようにしたいと思います。

設定は今までの差分を利用しますので、初めから設定したい方は以下記事を参照してください。

Djangoでくじ引きアプリを作ってみる_part1

Djangoでくじ引きアプリを作ってみる_part2

Djangoでくじ引きアプリを作ってみる_part3

Djangoでくじ引きアプリを作ってみる_part4

Djangoでくじ引きアプリを作ってみる_part5

Djangoでくじ引きアプリを作ってみる_part6

Djangoでくじ引きアプリを作ってみる_part7

Djangoでくじ引きアプリを作ってみる_part8

Djangoでくじ引きアプリを作ってみる_part9

ユーザがログイン時にだけ投稿や編集・削除できるようにする

【手順】

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

次の手順で確認していきます。

  1. 以下URLにブラウザでアクセスする
    http://localhost:8000/tdl
  2. 一覧画面のナビゲーションバーの上に「Login」や「Sign up」リンクが表示されています
  3. 以下のリンクをクリックして、ログイン画面に遷移するかを確認する
    ・新規作成
    ・実行
    ・編集
    ・削除
  4. 続いてログインした時に動作するかを確認する
    ・新規作成
    ・実行
    ・編集
    ・削除

確認した結果を動画に取りました。

以上で今回の目的であるログイン時にだけ操作できるうようにすることができました。

次回はログイン状態の時だけ新規投稿・実行・編集・削除のリンクを表示させるようにしてみます。

ありがとうございました。

【参考にしたサイトと本】

#07:ログイン時だけ投稿・編集・削除を可能にしよう

Python Django3超入門 (日本語) 単行本 – 2020/6/13

コメント

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