有效管理任務在我們忙碌的生活中至關重要,而待辦事項清單應用程式可以成為保持井井有條的絕佳工具。這篇部落格文章將引導您完成使用 Django(一個強大且多功能的 Python Web 框架)開發待辦事項清單應用程式的過程。該專案名為 django-todoList,旨在幫助用戶無縫創建、管理和追蹤他們的日常任務。
已安裝 Python(最好是 3.8 或更高版本)。
已安裝 Django。如果沒有,您可以使用以下命令安裝它。
pip install django
首先,使用指令建立一個新的 Django 專案:
django-admin startproject mysite
導航到您的專案資料夾:
cd mysite
接下來,在專案中建立一個應用程式。我們稱之為 todoList:
python manage.py startapp todoList
在 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
該模型包括標題、描述、截止日期和完成等字段,用於儲存每個任務的詳細資訊。我們也透過使用者外鍵將每個任務與使用者關聯。
模型準備就緒後,運行遷移以在資料庫中為此模型建立表格:
python manage.py makemigrations python manage.py migrate
我們需要表單來處理使用者輸入以建立和更新任務。在 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 模型自動建立表單欄位。
接下來,我們需要建立視圖來處理使用者請求,例如建立任務、更新任務和列出任務。
在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 確保只有登入的使用者才能存取這些視圖。
在 todoList/urls.py 中,將 URL 對應到各自的視圖:
pip install django
這些 URL 模式會將每個視圖對應到特定的 URL。例如,任務清單顯示在應用程式的根URL處,使用者可以透過存取特定URL來建立、編輯或刪除任務。
建立以下 HTML 範本來渲染視圖:
基本範本為所有頁面提供一致的佈局:
django-admin startproject mysite
在views.py中,你可以使用Django內建的使用者認證檢視來處理使用者註冊和登入。例如,您可以使用 UserCreationForm 來允許使用者註冊:
cd mysite
一切設定完畢後,您就可以執行伺服器了:
python manage.py startapp todoList
造訪 http://127.0.0.1:8000/todoList 查看您的待辦事項清單應用程式的運作!
settings.py 檔案是每個 Django 專案的重要組成部分。它包含專案的配置設置,例如資料庫設定、安裝的應用程式、中間件、靜態檔案配置等。此檔案控制專案的行為並允許 Django 連接各個元件之間的點。
以下是 GetDone 待辦事項清單應用的 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 提供的用於用戶身份驗證、管理面板和靜態文件的預設應用程式。
在 Django 中,urls.py 檔案處理 HTTP 請求到視圖的路由。您可以在此處將 URL 模式(例如 /tasks/、/login/)對應到處理它們的對應視圖。
在 mysite/urls.py 中,您通常包含整個專案的 URL,並將它們連結到應用程式層級 urls.py 檔案。
這是 urls.py 在 GetDone 應用程式中的樣子:
專案級 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 的架構允許不同檔案和元件之間順利通訊:
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中文網其他相關文章!