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

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
如何使用Python查找文本文件的ZIPF分佈如何使用Python查找文本文件的ZIPF分佈Mar 05, 2025 am 09:58 AM

本教程演示如何使用Python處理Zipf定律這一統計概念,並展示Python在處理該定律時讀取和排序大型文本文件的效率。 您可能想知道Zipf分佈這個術語是什麼意思。要理解這個術語,我們首先需要定義Zipf定律。別擔心,我會盡量簡化說明。 Zipf定律 Zipf定律簡單來說就是:在一個大型自然語言語料庫中,最頻繁出現的詞的出現頻率大約是第二頻繁詞的兩倍,是第三頻繁詞的三倍,是第四頻繁詞的四倍,以此類推。 讓我們來看一個例子。如果您查看美國英語的Brown語料庫,您會注意到最頻繁出現的詞是“th

我如何使用美麗的湯來解析HTML?我如何使用美麗的湯來解析HTML?Mar 10, 2025 pm 06:54 PM

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

python中的圖像過濾python中的圖像過濾Mar 03, 2025 am 09:44 AM

處理嘈雜的圖像是一個常見的問題,尤其是手機或低分辨率攝像頭照片。 本教程使用OpenCV探索Python中的圖像過濾技術來解決此問題。 圖像過濾:功能強大的工具圖像過濾器

如何使用TensorFlow或Pytorch進行深度學習?如何使用TensorFlow或Pytorch進行深度學習?Mar 10, 2025 pm 06:52 PM

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

Python中的平行和並發編程簡介Python中的平行和並發編程簡介Mar 03, 2025 am 10:32 AM

Python是數據科學和處理的最愛,為高性能計算提供了豐富的生態系統。但是,Python中的並行編程提出了獨特的挑戰。本教程探討了這些挑戰,重點是全球解釋

如何在Python中實現自己的數據結構如何在Python中實現自己的數據結構Mar 03, 2025 am 09:28 AM

本教程演示了在Python 3中創建自定義管道數據結構,利用類和操作員超載以增強功能。 管道的靈活性在於它能夠將一系列函數應用於數據集的能力,GE

python對象的序列化和避難所化:第1部分python對象的序列化和避難所化:第1部分Mar 08, 2025 am 09:39 AM

Python 對象的序列化和反序列化是任何非平凡程序的關鍵方面。如果您將某些內容保存到 Python 文件中,如果您讀取配置文件,或者如果您響應 HTTP 請求,您都會進行對象序列化和反序列化。 從某種意義上說,序列化和反序列化是世界上最無聊的事情。誰會在乎所有這些格式和協議?您想持久化或流式傳輸一些 Python 對象,並在以後完整地取回它們。 這是一種在概念層面上看待世界的好方法。但是,在實際層面上,您選擇的序列化方案、格式或協議可能會決定程序運行的速度、安全性、維護狀態的自由度以及與其他系

Python中的數學模塊:統計Python中的數學模塊:統計Mar 09, 2025 am 11:40 AM

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3 Mac版

SublimeText3 Mac版

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

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具