ホームページ >バックエンド開発 >Python チュートリアル >Get Done ✅ : Django To Do リストを作成するためのステップバイステップ ガイド

Get Done ✅ : Django To Do リストを作成するためのステップバイステップ ガイド

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-06 06:20:40909ブラウズ

Get Done ✅ : A step-by-step guide in building a Django To Do List

導入

私たちの多忙な生活において、タスクを効果的に管理することは非常に重要であり、To Do リスト アプリケーションは、整理整頓を保つための優れたツールとなります。このブログ投稿では、Python の強力で多用途な Web フレームワークである Django を使用した To Do リスト アプリケーションの開発について説明します。 django-todoList というタイトルのこのプロジェクトは、ユーザーが日常のタスクをシームレスに作成、管理、追跡できるように設計されています。

前提条件

始める前に、以下のものがあることを確認してください。

  • Python がインストールされている (バージョン 3.8 以降が望ましい)。

  • Django がインストールされました。そうでない場合は、次のコマンドを使用してインストールできます。

pip install django
  • Django の仕組みについての基本的な理解と、Python と HTML についての知識。

ステップ 1: プロジェクトのセットアップ

1.1 Django プロジェクトの作成

まず、次のコマンドを使用して新しい Django プロジェクトを作成します。

django-admin startproject mysite

プロジェクト フォルダーに移動します:

cd mysite

1.2 Django アプリを作成する

次に、プロジェクト内にアプリを作成します。これを todoList と呼びます:

python manage.py startapp todoList

ステップ 2: モデルを定義する

Django では、モデルを使用してデータの構造を定義します。 GetDone To-Do アプリの場合、タスクを表すモデルが必要です。

todoList/models.py に移動し、タスク モデルを定義します。

from django.db import models
from django.contrib.auth.models import User

class Task(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    complete = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    deadline = models.DateTimeField(null=True, blank=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

このモデルには、タイトル、説明、期限、各タスクの詳細を保存する完了などのフィールドが含まれています。また、ユーザー外部キーを介して各タスクをユーザーに関連付けます。

2.1 データベースの移行

モデルの準備ができたら、移行を実行してデータベースにこのモデルのテーブルを作成します。

python manage.py makemigrations
python manage.py migrate

ステップ 3: フォームを作成する

タスクを作成および更新するためのユーザー入力を処理するフォームが必要です。 todoList/forms.py で、TaskForm を作成します:

from django import forms
from .models import Task

class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        fields = ['title', 'description', 'deadline', 'complete']
        widgets = {
            'title': forms.TextInput(attrs={'placeholder': 'Enter task title'}),
            'description': forms.Textarea(attrs={'placeholder': 'Enter task description', 'rows': 4}),
            'deadline': forms.DateTimeInput(attrs={'type': 'datetime-local'}),
            'complete': forms.CheckboxInput(),
        }

    def clean_title(self):
        title = self.cleaned_data.get('title')
        if not title:
            raise forms.ValidationError('Title is required')
        return title

    def clean_description(self):
        description = self.cleaned_data.get('description')
        if not description:
            raise forms.ValidationError('Description is required')
        return description

    def clean_deadline(self):
        deadline = self.cleaned_data.get('deadline')
        if not deadline:
            raise forms.ValidationError('Deadline is required')
        return deadline

TaskForm は Django の ModelForm を使用して、タスク モデルのフォーム フィールドを自動的に作成します。

ステップ 4: ビューを定義する

次に、タスクの作成、更新、一覧表示などのユーザー リクエストを処理するビューを作成する必要があります。

todoList/views.py で、ビューを定義します。

from django.shortcuts import render, redirect
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
from django.contrib.auth.views import LoginView
from django.contrib.auth.mixins import LoginRequiredMixin
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from .models import Task
from .forms import TaskForm
from django.contrib import messages
from django.utils import timezone


# Task List View
class TodoListView(LoginRequiredMixin, ListView):
    model = Task
    context_object_name = 'tasks'
    template_name = 'task_list.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        user_tasks = Task.objects.filter(user=self.request.user)
        context['tasks'] = Task.objects.filter(user=self.request.user)
        context['incomplete_tasks_count'] = user_tasks.filter(complete=False).count()  # Count incomplete tasks
        context['now'] = timezone.now()
        return context

# Task Create View
class TaskCreate(LoginRequiredMixin, CreateView):
    model = Task
    form_class = TaskForm
    template_name = 'todoList/task_create.html'
    success_url = reverse_lazy('todoList')

    def form_valid(self, form):
        form.instance.user = self.request.user
        messages.success(self.request, 'Task created successfully!')
        return super(TaskCreate, self).form_valid(form)

# Task Update View
class TaskUpdate(LoginRequiredMixin, UpdateView):
    model = Task
    form_class = TaskForm
    template_name = 'todoList/task_update.html'
    success_url = reverse_lazy('todoList')
    def form_valid(self, form):
        messages.success(self.request, 'Task updated successfully!')
        return super(TaskUpdate, self).form_valid(form)

# Task Delete View
class TaskDelete(LoginRequiredMixin, DeleteView):
    model = Task
    context_object_name = 'task'
    template_name = 'todoList/task_delete.html'
    success_url = reverse_lazy('todoList')
    def dispatch(self, request, *args, **kwargs):
        response = super().dispatch(request, *args, **kwargs)
        if response.status_code == 302:
            messages.success(self.request, 'Task deleted successfully!')
        return response

# User Registration View
class RegisterView(CreateView):
    form_class = UserCreationForm
    template_name = 'todoList/register.html'
    success_url = reverse_lazy('todoList')

    def form_valid(self, form):
        response = super().form_valid(form)
        # Log the user in after successful registration
        from django.contrib.auth import login
        login(self.request, self.object)
        messages.success(self.request, 'Registration successful! Welcome!')
        return response


# Login View
class CustomLoginView(LoginView):
    template_name = 'todoList/login.html'
    fields = '__all__'
    redirect_authenticated_user = True

    def get_success_url(self):
        messages.success(self.request, 'You have logged in successfully!')
        return reverse_lazy('todoList')

-TodoListView: ログインしているユーザーのすべてのタスクをリストします。
-TaskCreate: タスクの作成を処理します。
-TaskUpdate: ユーザーがタスクを更新できるようにします。
-TaskDelete: タスクを削除するための確認ページを提供します。
LoginRequiredMixin は、ログインしたユーザーのみがこれらのビューにアクセスできるようにします。

ステップ 5: URL を構成する

todoList/urls.py で、URL をそれぞれのビューにマップします。

pip install django

これらの URL パターンは、各ビューを特定の URL にマップします。たとえば、タスク リストはアプリのルート URL に表示され、ユーザーは特定の URL にアクセスしてタスクを作成、編集、削除できます。

ステップ 6: テンプレートを作成する

ビューをレンダリングするために次の HTML テンプレートを作成します:

6.1 基本.html

基本テンプレートは、すべてのページに一貫したレイアウトを提供します:

django-admin startproject mysite

ステップ 8: ユーザー認証を追加する

views.py では、Django の組み込みユーザー認証ビューを使用して、ユーザーの登録とログインを処理できます。たとえば、UserCreationForm を使用して、ユーザーがサインアップできるようにすることができます。

cd mysite

ステップ 8: サーバーを実行する

すべてのセットアップが完了したら、サーバーを実行できます。

python manage.py startapp todoList

http://127.0.0.1:8000/todoList にアクセスして、To-Do リスト アプリの動作を確認してください。

mysite フォルダー内の settings.py と urls.py について

設定.py

settings.py ファイルは、すべての Django プロジェクトの重要な部分です。これには、データベース設定、インストールされているアプリ、ミドルウェア、静的ファイル構成など、プロジェクトの構成設定が含まれています。このファイルはプロジェクトの動作を制御し、Django がさまざまなコンポーネント間の点を結びつけることを可能にします。

GetDone To-Do リスト アプリの settings.py の主要な設定の概要を以下に示します。

settings.py の主要なセクション:

インストールされているアプリ: INSTALLED_APPS リストには、プロジェクトで使用されるすべてのアプリを登録します。例:

from django.db import models
from django.contrib.auth.models import User

class Task(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField()
    complete = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    deadline = models.DateTimeField(null=True, blank=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.title

ここでは、ユーザー認証、管理パネル、静的ファイル用に Django が提供するデフォルト アプリに加えて、タスクを管理するアプリである todoList を追加しました。

URL.py

Django では、urls.py ファイルがビューへの HTTP リクエストのルーティングを処理します。ここで、URL パターン (/tasks/、/login/ など) を、それらを処理する対応するビューにマップします。

mysite/urls.py には、通常、プロジェクト全体の URL を含めて、アプリレベルの urls.py ファイルにリンクします。

GetDone アプリでの urls.py は次のようになります:

urls.py の主要なセクション:

プロジェクト レベルの urls.py (mysite/urls.py): mysite フォルダー内の urls.py ファイルは、Django プロジェクト全体のメイン ルーターです。これには、管理パネル、認証、アプリの特定の URL へのリンクの URL が含まれます。以下に例を示します:

pip install django

path('admin/', admin.site.urls): この行には Django 管理パネルが含まれています。
path('accounts/', include('django.contrib.auth.urls')): これには、ログイン、ログアウト、パスワード管理のための組み込みの認証 URL が含まれます。
path('', include('todoList.urls')): これにはアプリ固有の URL (todoList/urls.py で定義) が含まれるため、ユーザーはタスクやその他の機能をナビゲートできます。
アプリレベルの urls.py (todoList/urls.py): このファイルは、特定の URL を todoList アプリ内のビューにマップします。これには、タスクの表示、タスクの作成、およびその他のタスク関連アクションのためのパスが含まれています。例:

django-admin startproject mysite

TodoListView.as_view(): このビューには、ログイン ユーザーのすべてのタスクがリストされます。
TaskCreate.as_view(): このビューはタスク作成フォームを処理します。
TaskUpdate.as_view(): このビューはタスク更新フォームを処理します。
TaskDelete.as_view(): このビューは、タスク削除確認ページを処理します。

ファイル間の通信

Django のアーキテクチャにより、さまざまなファイルとコンポーネント間のスムーズな通信が可能になります。

URL とビュー:

urls.py は、タスクの作成やリストの表示などのビューに URL をマップします。ビューは views.py.

で定義されます。

モデルとビュー:

ビューは、モデル (models.py で定義) と対話して、データ (タスク) を取得および操作します。たとえば、TodoListView では、ビューは Task.objects.filter(user=self.request.user) を使用してログイン ユーザーに関連付けられたタスクを取得します。

フォームとビュー:

フォーム (forms.py の TaskForm など) はユーザー入力を処理し、モデルと対話してデータを検証して保存します。

テンプレート:

テンプレートは HTML で最終出力をレンダリングし、ビューから渡されたデータを表示し、フォームを介したユーザー入力を処理します。

結論

これらの手順により、Django を使用して完全に機能する ToDo リスト アプリを構築できました。ユーザー認証、タスク管理 (作成、編集、削除) を実装し、Django の MVC (MTV) アーキテクチャがモデル、ビュー、テンプレート、URL 間のスムーズな通信をどのように促進するかを学びました。このガイドは、将来的により複雑な Django アプリケーションを構築するための強固な基盤として機能します。

アプリケーションの完全なコードは、
で複製できます。

cd mysite

コーディングを楽しんでください! ?

以上がGet Done ✅ : Django To Do リストを作成するためのステップバイステップ ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。