如何通过一个简单的待办事项案例入门Django开发
目录导读
- 为什么选择待办事项案例学习Django?
- 环境搭建与项目初始化
- 设计数据库模型(Model)
- 创建视图与模板(View & Template)
- 配置URL路由
- 运行测试与常见问题解答
- 总结与下一步学习建议
为什么选择待办事项案例学习Django?
对于编程新手或想快速入门Web框架的开发者,待办事项应用(Todo App) 是最经典的入门项目,它涵盖了Django的核心功能:数据库操作、路由分发、模板渲染,同时逻辑简单,不会因业务复杂而分散注意力,据统计,超过60%的Django初学者首选待办事项作为第一个实践项目,通过这个案例,你将在40分钟内掌握Django开发的基本流程。
环境搭建与项目初始化
步骤1:安装Python与虚拟环境
确保你的电脑已安装Python 3.8+(推荐3.10),打开终端,创建一个专属虚拟环境:
python -m venv todo_env source todo_env/bin/activate # Mac/Linux todo_env\Scripts\activate # Windows
步骤2:安装Django
pip install django
验证安装:python -m django --version,应显示4.0以上版本。
步骤3:创建项目与应用
django-admin startproject todo_project cd todo_project python manage.py startapp todo
现在你的项目结构应类似:
todo_project/
manage.py
todo_project/ (settings.py, urls.py 等)
todo/ (models.py, views.py 等)
设计数据库模型(Model)
打开 todo/models.py,编写一个简单的任务模型:
from django.db import models
class Task(models.Model):= models.CharField(max_length=200)
completed = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
关键点说明:
CharField存储字符串,max_length=200限制标题长度BooleanField标记任务是否完成,默认Falseauto_now_add=True自动记录创建时间
然后运行迁移命令,将模型同步到数据库:
python manage.py makemigrations python manage.py migrate
常见问题: 为什么需要执行 makemigrations 和 migrate 两次?
答: makemigrations 生成迁移文件(记录模型变更),migrate 将变更应用到实际数据库,这是Django管理数据库变更的标准方式。
创建视图与模板(View & Template)
视图(Views) 负责处理用户请求并返回响应,我们创建两个视图:一个显示任务列表,一个添加新任务。
打开 todo/views.py:
from django.shortcuts import render, redirect
from .models import Task
from .forms import TaskForm # 稍后创建
def task_list(request):
tasks = Task.objects.all().order_by('-created_at')
form = TaskForm()
return render(request, 'todo/task_list.html', {'tasks': tasks, 'form': form})
def add_task(request):
if request.method == 'POST':
form = TaskForm(request.POST)
if form.is_valid():
form.save()
return redirect('task_list')
return redirect('task_list')
模板(Templates) 是HTML文件,在 todo/ 文件夹内创建 templates/todo/ 目录,然后新建 task_list.html:
<!DOCTYPE html>
<html>
<head>我的待办事项</title>
</head>
<body>
<h1>待办事项</h1>
<form method="post" action="{% url 'add_task' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">添加任务</button>
</form>
<ul>
{% for task in tasks %}
<li>
{{ task.title }}
{% if task.completed %} ✅ {% endif %}
</li>
{% empty %}
<li>暂无任务,添加一个吧!</li>
{% endfor %}
</ul>
</body>
</html>
需要创建表单: 在 todo/ 下新建 forms.py:
from django import forms
from .models import Task
class TaskForm(forms.ModelForm):
class Meta:
model = Task
fields = ['title']
配置URL路由
应用内路由: 在 todo/ 下创建 urls.py:
from django.urls import path
from . import views
urlpatterns = [
path('', views.task_list, name='task_list'),
path('add/', views.add_task, name='add_task'),
]
项目主路由: 修改 todo_project/urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('todo.urls')), # 将根路径指向todo应用
]
注意:确保在
settings.py的INSTALLED_APPS中添加了'todo'。
运行测试与常见问题解答
启动开发服务器:
python manage.py runserver
打开浏览器访问 http://127.0.0.1:8000/,你应该能看到待办事项页面,输入任务标题并点击“添加任务”,新任务就会出现在列表中。
常见问答:
Q1:为什么页面显示“Page not found (404)”?
A:检查 urls.py 中是否正确定义了路径,以及 include 语句是否配置正确,重启服务器试一下。
Q2:添加任务后页面不显示新内容?
A:确认视图中的 return redirect('task_list') 正确,且 task_list 视图确实查询了所有任务,可以在视图中加 print(tasks) 调试。
Q3:CSRF验证失败怎么办?
A:所有POST表单必须包含 {% csrf_token %},这是Django的安全机制,如果你的模板遗漏了它,请立即添加。
Q4:如何让任务列表只显示未完成的任务?
A:修改视图中的查询:tasks = Task.objects.filter(completed=False).order_by('-created_at')
总结与下一步学习建议
通过这个待办事项案例,你已经掌握了Django开发的核心三要素:Model(和数据库交互)、View(业务逻辑)、Template(用户界面),这是MVC模式在Django中的体现,也是许多复杂Web应用的基础。
进阶推荐:
- 添加删除和标记完成功能:为每个任务添加删除按钮和复选框。
- 使用Bootstrap美化界面:引入CSS框架让页面更专业。
- 部署到生产环境:学习使用Gunicorn+Nginx部署你的第一个Django应用。
- 加入用户认证:让不同用户拥有自己的待办事项列表。
边学边做是掌握Django的最佳方式,打开终端,动手创建你的第一个待办事项应用吧!
标签: Django开发