todoリストを作る

はじめに

今回はDjangoを使ってtodoリストのアプリケーションを作成しました。

以下のようにやることを表示させ、詳細一覧から詳細を見れるようなアプリケーションを作成しました。
また、更新や削除のボタンを設け、そこからデータの変更をできるようにします。


アプリケーションの作成

まず作業するディレクトリを作り、以下のコードで仮想環境を作成します。

python3 -m venv myvenv

次に仮想環境を立ち上げ、Djangoをインストールします。
更にプロジェクトを作成します。

django-admin startproject todoproject

作成したプロジェクト内に移動し、アプリケーションを作成します。

python3 manage.py startapp todo

このtodoprojectというプロジェクトでアプリケーションを作っていきます。


アプリケーションの機能

作成したtodoアプリケーションでできる機能は次のものです。
作成(create)
削除(delete)
更新(update)
読み取り、一覧の表示(read)
ログイン


機能の説明

やることの登録は127.0.0.1:8000/todo/createにアクセスするとできるようにします。

削除は127.0.0.1:8000/todo/id/dereteにアクセスするようにします。
また、更新は127.0.0.1:8000/todo/id/updateにアクセスするようにします。
また、やることリストを作り、127.0.0.1:8000/todo/にアクセスするとデータを得られるようにします。


それぞれの遷移先のページではbootstrapを使ってhtmlファイルの記述をしました。

以上のページのhtmlを作成し、遷移させるためのtodo/urls.pyとviews.pyを載せておきます。

todo/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index_view, name='index'),
    path('todo/', views.ListtodoView.as_view(), name='list-todo'),
    path('todo/create/', views.CreatetodoView.as_view(), name='create-todo'),
    path('todo/<int:pk>/delete/', views.DeletetodoView.as_view(), name='delete-todo'),
    path('todo/<int:pk>/update/', views.UpdatetodoView.as_view(), name='update-todo'),
]

todo/views.py

from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import render, redirect
from django.urls import reverse, reverse_lazy
from django.views.generic import (ListView, CreateView, DeleteView, UpdateView)
from .models import todo

# Create your views here.
def index_view(request):
    object_list = todo.objects.all

    #paginator = Paginator(ITEM_PER_PAGE)
    #page_number = request.GET.get('page',1)
    #page_obj = paginator.page(page_number)

    return render(
        request,
        'todo/index.html',
        {'object_list': object_list}#, 'page_obj': page_obj},
    )

class ListtodoView(LoginRequiredMixin, ListView):
    template_name = 'todo/todo_list.html'
    model = todo
    #paginate_by = ITEM_PER_PAGE


class CreatetodoView(LoginRequiredMixin, CreateView):
    template_name = 'todo/todo_create.html'
    model = todo
    fields = {'title', 'text', 'category'}
    success_url = reverse_lazy('list-todo')

    def form_valid(self, form):
        form.instance.user = self.request.user

        return super().form_valid(form)

class DeletetodoView(LoginRequiredMixin, DeleteView):
    template_name = 'todo/todo_confirm_delete.html'
    model = todo
    success_url = reverse_lazy('list-todo')

    def get_object(self, queryset=None):
        obj = super().get_object(queryset)

        if obj.user != self.request.user:
            raise PermissionDenied

        return obj

class UpdatetodoView(LoginRequiredMixin, UpdateView):
    template_name = 'todo/todo_update.html'
    model = todo
    fields = {'title', 'text', 'category'}
    success_url = reverse_lazy('list-todo')

    def get_object(self, queryset=None):
        obj = super().get_object(queryset)

        if obj.user != self.request.user:
            raise PermissionDenied

        return obj

おわりに

今回はtodoリストの作成を行いました。
CRUDの実装をし、簡単な操作が一覧からできるようにしました。

最後に作成したアプリケーションをGitHubに上げたのでリンクを貼っておきます。
https://github.com/1hayato1/todoproject