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

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

Jan 06, 2025 am 06:20 AM

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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Investing.comの反クローラーメカニズムをバイパスするニュースデータを取得する方法は? Apr 02, 2025 am 07:03 AM

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。

See all articles