首頁 > 後端開發 > Python教學 > 完成 ✅:建立 Django 待辦事項清單的逐步指南

完成 ✅:建立 Django 待辦事項清單的逐步指南

Patricia Arquette
發布: 2025-01-06 06:20:40
原創
928 人瀏覽過

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

介紹

有效管理任務在我們忙碌的生活中至關重要,而待辦事項清單應用程式可以成為保持井井有條的絕佳工具。這篇部落格文章將引導您完成使用 Django(一個強大且多功能的 Python Web 框架)開發待辦事項清單應用程式的過程。該專案名為 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 待辦事項應用程序,我們需要一個模型來表示任務。

導覽至 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 會為 Task 模型自動建立表單欄位。

第 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 查看您的待辦事項清單應用程式的運作!

了解 mysite 資料夾中的 settings.py 和 urls.py

設定.py

settings.py 檔案是每個 Django 專案的重要組成部分。它包含專案的配置設置,例如資料庫設定、安裝的應用程式、中間件、靜態檔案配置等。此檔案控制專案的行為並允許 Django 連接各個元件之間的點。

以下是 GetDone 待辦事項清單應用的 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

登入後複製
登入後複製

在這裡,我們添加了 todoList,它是管理任務的應用程序,以及 Django 提供的用於用戶身份驗證、管理面板和靜態文件的預設應用程式。

urls.py

在 Django 中,urls.py 檔案處理 HTTP 請求到視圖的路由。您可以在此處將 URL 模式(例如 /tasks/、/login/)對應到處理它們的對應視圖。

在 mysite/urls.py 中,您通常包含整個專案的 URL,並將它們連結到應用程式層級 urls.py 檔案。

這是 urls.py 在 GetDone 應用程式中的樣子:

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 建立了一個功能齊全的待辦事項清單應用程式。您已經實現了使用者驗證、任務管理(建立、編輯、刪除),並了解了 Django 的 MVC (MTV) 架構如何促進模型、視圖、範本和 URL 之間的順暢通訊。本指南為將來建立更複雜的 Django 應用程式奠定了堅實的基礎。

應用程式的完整程式碼可在
克隆

cd mysite
登入後複製
登入後複製
登入後複製

編碼愉快! ?

以上是完成 ✅:建立 Django 待辦事項清單的逐步指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板