1. Django项目开发全流程实战:从零构建投票应用
作为一名使用Django开发过多个Web应用的老手,我想分享一个完整的投票应用开发过程。这个教程将带你从环境搭建开始,逐步实现模型设计、视图编写、模板渲染、表单处理等核心功能,最终完成一个具备完整前后端的投票系统。
提示:本教程基于Django 4.2 LTS版本,但核心概念适用于大多数Django版本。建议使用Python 3.8+环境。
1.1 环境准备与项目创建
首先确保你已经安装了Python和pip。打开终端(Windows用户使用CMD或PowerShell),执行以下命令检查Django是否已安装:
bash复制python -m django --version
如果未安装,使用pip安装最新稳定版:
bash复制pip install django
创建项目骨架(我将项目命名为djangotutorial):
bash复制django-admin startproject djangotutorial
cd djangotutorial
此时目录结构应如下:
code复制djangotutorial/
manage.py
djangotutorial/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
1.2 创建投票应用
Django项目由多个应用组成。创建名为polls的投票应用:
bash复制python manage.py startapp polls
这会在项目目录下生成polls应用的基本结构:
code复制polls/
__init__.py
admin.py
apps.py
migrations/
models.py
tests.py
views.py
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 模型设计与数据库配置
2.1 定义数据模型
打开polls/models.py,设计投票问题的核心模型:
python复制from django.db import models
from django.utils import timezone
import datetime
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __str__(self):
return self.question_text
def was_published_recently(self):
now = timezone.now()
return now - datetime.timedelta(days=1) <= self.pub_date <= now
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
def __str__(self):
return self.choice_text
这个模型设计体现了几个关键点:
- Question和Choice通过外键关联
- 每个字段都明确定义了类型和约束
- 添加了业务方法was_published_recently()
2.2 数据库迁移
Django使用迁移系统管理模型变更。执行以下命令:
bash复制python manage.py makemigrations polls
python manage.py migrate
注意:首次迁移会创建Django内置应用的表,如用户认证、会话管理等。
3. 管理后台配置
3.1 创建超级用户
bash复制python manage.py createsuperuser
按提示输入用户名、邮箱和密码。
3.2 注册模型到admin
编辑polls/admin.py:
python复制from django.contrib import admin
from .models import Question, Choice
admin.site.register(Question)
admin.site.register(Choice)
启动开发服务器:
bash复制python manage.py runserver
访问http://127.0.0.1:8000/admin/,使用刚创建的超级用户登录。
4. 视图与URL配置
4.1 编写第一个视图
在polls/views.py中添加:
python复制from django.http import HttpResponse
from .models import Question
def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
output = ', '.join([q.question_text for q in latest_question_list])
return HttpResponse(output)
4.2 配置URL路由
创建polls/urls.py:
python复制from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
]
在项目级的djangotutorial/urls.py中包含这个路由:
python复制from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]
现在访问http://127.0.0.1:8000/polls/应该能看到问题列表。
5. 模板系统集成
5.1 创建模板目录
在polls应用下创建目录结构:
code复制polls/
templates/
polls/
index.html
