6.2 KiB
6.2 KiB
编程学习模块教学内容与资料下载实现计划
需求总结
为编程学习模块(Python基础)添加三部分教学内容:
- 文章教学 - Markdown格式的章节内容
- 视频学习 - 章节视频播放
- 资料下载 - 新增功能,支持下载课程资料(代码、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次下载 │
│ [ 立即下载 ] │
└─────────────────────────┘
支持的文件类型
| 类型 | 扩展名 | 图标 |
|---|---|---|
| 📄 | ||
| 代码 | .py, .js, .html, .css | 💻 |
| 压缩包 | .zip, .rar, .7z | 📦 |
| 文档 | .doc, .docx, .md | 📝 |
| 其他 | * | 📎 |
验证步骤
-
模型迁移
python manage.py makemigrations learn python manage.py migrate -
种子数据
python manage.py seed_python_content -
API测试
- GET /api/learn/materials/?chapter_id=1 - 获取资料列表
- GET /api/learn/materials/1/download/ - 下载文件
-
前端测试
- 进入Python课程 → 选择章节 → 点击"资料"标签
- 显示资料列表 → 点击下载按钮 → 文件下载成功
风险评估
- 文件上传需要配置
MEDIA_ROOT和MEDIA_URL - 大文件下载可能需要流式传输
- 下载权限控制(是否需要登录)
- 文件大小限制和存储配额
后续优化
- 资料上传进度条
- 批量下载(打包为zip)
- 资料搜索功能
- 用户上传资料审核