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

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

Jan 06, 2025 am 06:20 AM

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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何解決Linux終端中查看Python版本時遇到的權限問題? 如何解決Linux終端中查看Python版本時遇到的權限問題? Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? 如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到? Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? 在Python中如何高效地將一個DataFrame的整列複製到另一個結構不同的DataFrame中? Apr 01, 2025 pm 11:15 PM

在使用Python的pandas庫時,如何在兩個結構不同的DataFrame之間進行整列複製是一個常見的問題。假設我們有兩個Dat...

Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Uvicorn是如何在沒有serve_forever()的情況下持續監聽HTTP請求的? Apr 01, 2025 pm 10:51 PM

Uvicorn是如何持續監聽HTTP請求的? Uvicorn是一個基於ASGI的輕量級Web服務器,其核心功能之一便是監聽HTTP請求並進�...

在Linux終端中使用python --version命令時如何解決權限問題? 在Linux終端中使用python --version命令時如何解決權限問題? Apr 02, 2025 am 06:36 AM

Linux終端中使用python...

如何在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