Files
2026-08-05 23:59:22 +08:00

6.2 KiB
Raw Permalink Blame History

编程学习模块教学内容与资料下载实现计划

需求总结

为编程学习模块(Python基础)添加三部分教学内容:

  1. 文章教学 - Markdown格式的章节内容
  2. 视频学习 - 章节视频播放
  3. 资料下载 - 新增功能,支持下载课程资料(代码、PDF等)

当前状态分析

现有架构

  • Course → Chapter → ChapterContent(Markdown内容)
  • 章节已有 video_url 字段,但缺少资料下载功能
  • CourseLearn.tsx 已有视频和文档标签页,但无下载入口

需要新增的内容

  • 5个Python基础章节的完整Markdown教学内容
  • 视频链接(使用免费教学视频)
  • 资料下载功能(新模型 + 前端UI)

实现方案

1. 新增资料下载模型

文件:learn/models.py

新增模型 CourseMaterial:

class CourseMaterial(models.Model):
    chapter = models.ForeignKey(Chapter, on_delete=models.CASCADE, related_name='materials', verbose_name='章节')
    title = models.CharField(max_length=200, verbose_name='资料名称')
    file = models.FileField(upload_to='learn/materials/%Y/%m/', verbose_name='文件')
    file_type = models.CharField(max_length=20, choices=[('pdf', 'PDF'), ('code', '代码'), ('other', '其他')], default='other')
    file_size = models.PositiveIntegerField(default=0, verbose_name='文件大小(字节)')
    download_count = models.PositiveIntegerField(default=0, verbose_name='下载次数')
    sort_order = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ['sort_order']
        verbose_name = '课程资料'
        verbose_name_plural = '课程资料'

2. 新增资料下载API

文件:learn/views.py

新增视图:

  • MaterialListView - 获取章节资料列表
  • MaterialDownloadView - 文件下载接口(增加下载次数统计)

文件:learn/serializers.py

新增序列化器:

  • MaterialSerializer - 资料列表序列化

3. 前端资料下载UI

文件:CourseLearn.tsx

修改内容:

  • 新增"资料"标签页,显示当前章节的可下载资料
  • 资料卡片展示:文件名、类型图标、大小、下载次数
  • 点击下载按钮触发文件下载
  • 支持PDF、代码文件、压缩包等类型图标

4. Python基础教学内容

文件:learn/management/commands/seed_python_content.py

新增种子命令,为Python课程填充5个章节内容:

章节1:Python 简介与安装

  • 文章内容:Python历史、特点、安装步骤、第一个程序
  • 视频:B站Python入门视频链接
  • 资料:Python安装包链接、练习题

章节2:变量与数据类型

  • 文章内容:变量命名、数字、字符串、列表、字典、元组
  • 视频:数据类型详解视频
  • 资料:练习题代码、速查表PDF

章节3:条件判断与循环

  • 文章内容:if/else、for循环、while循环、break/continue
  • 视频:流程控制教学视频
  • 资料:编程练习题、示例代码

章节4:函数与模块

  • 文章内容:函数定义、参数、返回值、模块导入、标准库
  • 视频:函数与模块视频
  • 资料:常用模块速查表、练习代码

章节5:面向对象编程

  • 文章内容:类与对象、继承、多态、封装、魔术方法
  • 视频:OOP教学视频
  • 资料:完整示例代码、OOP设计模式PDF

5. 种子数据更新

文件:seed_courses.py

在创建章节时,同时创建示例 ChapterContent 内容(Markdown格式)。

涉及文件

后端(Django)

文件 修改类型 说明
learn/models.py 修改 新增 CourseMaterial 模型
learn/serializers.py 修改 新增 MaterialSerializer
learn/views.py 修改 新增资料列表和下载接口
learn/urls.py 修改 新增资料相关路由
learn/admin.py 修改 注册 CourseMaterial 模型
learn/management/commands/seed_python_content.py 新增 Python基础内容种子命令

前端(React)

文件 修改类型 说明
CourseLearn.tsx 修改 新增资料下载标签页和UI
CourseLearn.css 修改 资料卡片样式
api/request.ts 修改 新增资料API调用
locales/zh.json 修改 新增资料相关文本

资料下载功能设计

数据库流程

Chapter → CourseMaterial(1:N)
用户点击下载 → API查询文件 → 文件流返回 → download_count + 1

前端展示

[视频] [文档] [资料]  ← 标签页
┌─────────────────────────┐
│ 📄 Python基础速查表.pdf   │
│ 📝 1.2 MB  |  128次下载   │
│ [ 立即下载 ]             │
├─────────────────────────┤
│ 💻 示例代码.zip          │
│ 📝 856 KB  |  89次下载    │
│ [ 立即下载 ]             │
└─────────────────────────┘

支持的文件类型

类型 扩展名 图标
PDF .pdf 📄
代码 .py, .js, .html, .css 💻
压缩包 .zip, .rar, .7z 📦
文档 .doc, .docx, .md 📝
其他 * 📎

验证步骤

  1. 模型迁移

    python manage.py makemigrations learn
    python manage.py migrate
    
  2. 种子数据

    python manage.py seed_python_content
    
  3. API测试

    • GET /api/learn/materials/?chapter_id=1 - 获取资料列表
    • GET /api/learn/materials/1/download/ - 下载文件
  4. 前端测试

    • 进入Python课程 → 选择章节 → 点击"资料"标签
    • 显示资料列表 → 点击下载按钮 → 文件下载成功

风险评估

  • 文件上传需要配置 MEDIA_ROOT 和 MEDIA_URL
  • 大文件下载可能需要流式传输
  • 下载权限控制(是否需要登录)
  • 文件大小限制和存储配额

后续优化

  • 资料上传进度条
  • 批量下载(打包为zip)
  • 资料搜索功能
  • 用户上传资料审核