首页 > 后端开发 > Python教程 > 完成 ✅:构建 Django 待办事项列表的分步指南

完成 ✅:构建 Django 待办事项列表的分步指南

Patricia Arquette
发布: 2025-01-06 06:20:40
原创
890 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板