该项目是按照 (https://docs.djangoproject.com/zh-hans/6.0/intro/tutorial01/) 一步步完成的。 每个教程节点都做了独立的 Git 提交,保留了完整的学习过程。
- Python 3.12
- Django 6.0
- MySQL 8.0
- Git + GitHub
# 1. 克隆仓库
git clone https://github.com/Kevin-K22/django-poll-tutorial.git
cd django-poll-tutorial
# 2. 创建并激活虚拟环境(Windows示例)
python -m venv myenv
myenv\Scripts\activate
# 若使用Anaconda
conda create -n myenv python=3.12
conda activate myenv
# 3. 安装 Django 6.0
pip install django==6.0
# 4. 生成迁移文件
python manage.py makemigrations
# 5. 数据库迁移
python manage.py migrate
# 6. 创建管理员账号(可选,用于访问后台)
python manage.py createsuperuser
# 7. 运行开发服务器
python manage.py runserver访问**http://127.0.0.1:8000/polls**即可查看投票应用首页 后台管理地址:http://127.0.0.1:8000/admin
-
初始化Django项目并验证runserver成功
-
创建polls应用编写第一个视图并成功运行
-
调整setting中的时区以及更改数据库配置为MySQL
-
添加Question和Choice模型并成功迁移
-
为Question和Choice模型添加了str方法,以及为Question模型添加了was_published_recently方法
-
在admin后台管理中注册模型Question
-
在polls/views.py中简单添加detail, results, vote视图并添加对应url路径
-
改写之前的index视图并创建index.html模板,实现模板渲染
-
实现detail视图以及处理404异常,添加detail.html模板
-
使用{% url %}标签改写index.html中的硬编码URL
-
更新detail.html模板,编写为一个简单的表单,实现vote视图,处理表单POST请求
-
实现results视图,编写results.html显示投票结果
-
用通用视图重构index/detail/results视图并修改对应URLconf
-
为Question模型中的was_published_recently方法编写测试用例发现bug后并修正该方法
-
为was_published_recently方法添加两个新测试用例以提供更全面的测试
-
改善IndexView视图的get_queryset方法
-
在测试代码中添加创建投票问题函数并为IndexView视图创建测试用例,主要测试新get_queryset方法
-
为DetailView创建get_queryset方法进行约束,防止用户通过url访问到尚未发布的问题,并创建了对应的测试用例
- 为应用添加了自定义界面和风格
-
自定义Question后台表单布局
-
为Question后台添加列表显示、过滤器和搜索框
-
自定义后台工程模板
- 安装Django Debug Toolbar并完成相关配置
djangotutorial/
├── mysite/ # 项目配置目录
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── polls/ # 投票应用
│ ├── migrations/ # 数据库迁移文件
│ ├── static/polls/ # 静态文件(style.css)
│ ├── templates/polls/ # 模板文件(index.html, detail.html, results.html)
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── templates/admin # 后台模板文件(base_site.html)
├── manage.py
├── requirements.txt
└── README.md
通过完成本教程,我学习并熟悉了:
-
Django MVT 设计模式
-
模型定义、数据库迁移 (makemigrations / migrate)
-
视图函数编写
-
模板语法、模板继承与静态文件管理
-
表单处理、重定向与 URL 反向解析
-
基础测试编写(TestCase)
-
Admin 后台定制化
-
Git 规范提交与 GitHub 远程托管