Django 在线练习(千字长文)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观
前言:为什么选择 Django 进行在线练习
在 Web 开发领域,Django 以高效、灵活和易用性著称,成为许多开发者入门的首选框架。对于编程初学者和中级开发者而言,Django 的**“电池包含在内”**(Batteries Included)设计理念,能显著降低学习曲线,帮助用户快速构建功能完整的 Web 应用。通过在线练习,开发者既能掌握核心技能,又能积累实战经验。本文将从环境搭建、核心概念解析到实战案例,系统性地指导读者完成 Django 的学习与实践。
一、环境搭建:开启 Django 之旅的第一步
1.1 Python 和 Django 的安装
Django 是基于 Python 的框架,因此需要先安装 Python 环境。推荐使用 Python 3.8 或更高版本,并通过 pip
工具管理依赖。安装命令如下:
pip install django
此外,建议使用虚拟环境(如 venv
或 conda
)隔离项目依赖,避免版本冲突。
1.2 创建第一个 Django 项目
执行以下命令创建名为 my_online_practice
的项目:
django-admin startproject my_online_practice
cd my_online_practice
运行开发服务器:
python manage.py runserver
访问 http://localhost:8000/
,若出现 Django 欢迎页面,则说明环境配置成功。
二、Django 核心概念解析:MVT 架构与 ORM
2.1 MVT 架构:理解 Django 的工作流程
Django 采用**模型-视图-模板(MVT)**架构,其核心思想与 MVC(模型-视图-控制器)类似,但更贴近 Web 开发的实际需求:
- 模型(Model):定义数据结构,如数据库表的字段和关系。
- 视图(View):处理业务逻辑,接收请求并返回响应。
- 模板(Template):负责界面渲染,分离业务与展示逻辑。
比喻:可将 MVT 比作餐厅的运作模式:
- 模型是后厨的“食材清单”,定义可提供的菜品;
- 视图是服务员的“点餐流程”,根据顾客需求(请求)准备菜品(数据);
- 模板是菜单和餐盘,决定菜品的呈现方式。
2.2 ORM:让数据库操作更简单
Django 的对象关系映射(ORM)将数据库操作抽象为 Python 对象,避免直接编写 SQL 语句。例如,定义一个用户模型:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=30)
email = models.EmailField(unique=True)
通过 python manage.py makemigrations
和 migrate
命令,Django 自动生成对应的数据库表。
三、实战案例:构建一个在线练习平台
3.1 需求分析与设计
假设要开发一个“编程题目练习平台”,包含以下功能:
- 用户注册与登录;
- 题目列表展示;
- 提交代码并获取评测结果。
3.2 模型设计:定义数据结构
创建 questions
应用,并设计 Question
和 Submission
模型:
class Question(models.Model):
title = models.CharField(max_length=100)
description = models.TextField()
difficulty = models.CharField(max_length=20, choices=[('easy', 'Easy'), ('medium', 'Medium'), ('hard', 'Hard')])
class Submission(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
code = models.TextField()
result = models.CharField(max_length=50, default='Pending')
3.3 视图与 URL 配置
创建视图处理用户请求,并配置 URL 路由:
from django.shortcuts import render, redirect
from .models import Question
def question_list(request):
questions = Question.objects.all()
return render(request, 'questions/list.html', {'questions': questions})
from django.urls import path
from . import views
urlpatterns = [
path('questions/', views.question_list, name='question_list'),
]
3.4 模板设计:动态渲染页面
在模板中展示题目列表:
<!-- templates/questions/list.html -->
{% for question in questions %}
<div class="question-item">
<h3>{{ question.title }}</h3>
<p>{{ question.description }}</p>
<span>Difficulty: {{ question.difficulty }}</span>
</div>
{% empty %}
<p>No questions available.</p>
{% endfor %}
四、进阶技巧:提升 Django 应用的可扩展性
4.1 中间件:全局请求处理
中间件(Middleware)允许在视图执行前或后拦截请求,实现如身份验证、日志记录等功能。例如,定义一个记录请求时间的中间件:
class RequestTimeMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
start_time = time.time()
response = self.get_response(request)
end_time = time.time()
print(f"Request took {end_time - start_time:.2f} seconds")
return response
在 settings.py
中注册该中间件:
MIDDLEWARE = [
...
'your_app.middleware.RequestTimeMiddleware',
]
4.2 RESTful API 开发:扩展应用场景
通过 Django REST Framework(DRF)快速构建 API 接口。例如,创建问题列表的 API 视图:
from rest_framework import generics
from .models import Question
from .serializers import QuestionSerializer
class QuestionListAPIView(generics.ListAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
配合 URL 配置,即可通过 GET /api/questions/
获取题目数据。
五、常见问题与调试技巧
5.1 调试 Django 应用
- 错误页面:开发模式下,Django 会显示详细的错误信息,包括堆栈跟踪和变量值。
- 日志记录:在
settings.py
中配置日志,跟踪关键操作:LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/var/log/django/debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'DEBUG', 'propagate': True, }, }, }
5.2 性能优化建议
- 缓存机制:使用 Django 缓存框架减少数据库查询。
- 异步任务:通过 Celery 处理耗时操作(如代码评测),避免阻塞主线程。
六、在线练习资源推荐
6.1 官方文档与社区资源
- Django 官方文档:https://docs.djangoproject.com
- Django Girls 教程:适合初学者的友好指南(https://tutorial.djangogirls.org )
6.2 实战项目参考
- GitHub 开源项目:搜索关键词“Django tutorial project”获取完整代码示例。
- 在线代码平台:如 Codecademy 提供的 Django 课程。
结论:持续练习与进阶方向
通过本文的指导,读者已掌握 Django 的基础架构、核心功能及实战开发方法。建议通过以下方式深化技能:
- 参与开源项目:贡献代码或修复 Bug,积累真实项目经验;
- 构建个人项目:例如电商系统、博客平台,逐步集成支付、权限管理等高级功能;
- 学习扩展库与最佳实践:如 Django Channels(WebSocket)、Django-Crispy-Forms(表单美化)。
Django 在线练习不仅是技术能力的提升过程,更是培养系统性思维和工程化能力的契机。保持实践热情,逐步攻克复杂需求,开发者终将成长为独当一面的 Web 开发者。