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  

此外,建议使用虚拟环境(如 venvconda)隔离项目依赖,避免版本冲突。

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 makemigrationsmigrate 命令,Django 自动生成对应的数据库表。


三、实战案例:构建一个在线练习平台

3.1 需求分析与设计

假设要开发一个“编程题目练习平台”,包含以下功能:

  • 用户注册与登录;
  • 题目列表展示;
  • 提交代码并获取评测结果。

3.2 模型设计:定义数据结构

创建 questions 应用,并设计 QuestionSubmission 模型:

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 官方文档与社区资源

6.2 实战项目参考

  • GitHub 开源项目:搜索关键词“Django tutorial project”获取完整代码示例。
  • 在线代码平台:如 Codecademy 提供的 Django 课程。

结论:持续练习与进阶方向

通过本文的指导,读者已掌握 Django 的基础架构、核心功能及实战开发方法。建议通过以下方式深化技能:

  1. 参与开源项目:贡献代码或修复 Bug,积累真实项目经验;
  2. 构建个人项目:例如电商系统、博客平台,逐步集成支付、权限管理等高级功能;
  3. 学习扩展库与最佳实践:如 Django Channels(WebSocket)、Django-Crispy-Forms(表单美化)。

Django 在线练习不仅是技术能力的提升过程,更是培养系统性思维和工程化能力的契机。保持实践热情,逐步攻克复杂需求,开发者终将成长为独当一面的 Web 开发者。

最新发布