面向家长与学生的课外读物推荐系统:为每个孩子建立档案(年龄 / 年级 / 阅读水平 / 兴趣标签),按「适读年龄 + 兴趣标签 + 相似小读者」三重匹配生成推荐书单,并给出可解释的推荐理由;配套书架、阅读打卡、评价、分级书单与阅读统计。
视频也可在 B 站视频页 观看
| 编程语言 | Python 3.8 及以上 |
|---|---|
| Web 框架 | Django 4.2 |
| 数据库 | MySQL 5.7 及以上 |
| 推荐算法 | NumPy(评分矩阵与余弦相似度) |
| 前端 | Bootstrap 5(已内置本地文件,离线可用,书封为纯 CSS 色块) |
| 报表导出 | openpyxl |
| 操作系统 | Windows / macOS / Linux |
| 启动方式 | 双击一键脚本,或 python manage.py runserver |
下面是交付包里的真实目录,共 104 个文件。只展示文件名,不含文件内容; 点击文件夹可逐层展开,看到每个模块是怎么拆分的。
点击任意一张可放大,支持左右切换(也可用键盘 ← → 键)










交付的任务书、开题报告与论文均为 Word 文档,下面是真实页面预览;点击可放大并左右切换:



能。源码里已带数据库与演示数据,安装依赖后双击一键脚本或按说明启动即可。
综合分 = 0.6 × 内容匹配 + 0.4 × 协同过滤。内容匹配由适龄分(0.5)、兴趣命中(0.3)与常读类型(0.2)组成;协同过滤是基于物品的余弦相似度(评分去均值后计算)。
每本书都标注适读年龄区间,适龄分作为内容匹配里权重最高的一项;年龄越界会按距离衰减,因此高年级读物不会排在前面。
不会。孩子还没有评价数据时会自动进入冷启动模式:把权重让给内容匹配,保证仍有推荐结果,并在页面上明确提示。
能。理由由「适龄 X-Y 岁」「命中兴趣:科学」「读过《某某》的孩子也喜欢」「编辑书单推荐」等片段组成,改 recommend/engine.py 中的 _content_reasons() 即可。
不是。书目是业务录入数据(演示用常见童书书名),孩子档案、打卡与评价由 seed_data 程序生成(固定随机种子,可复现),不对应任何真实个人。
为让交付包体积小、离线可用、无需管理图片资源,书封用纯 CSS 绘制(6 套配色),想换真实封面可给 Book 加 ImageField。
两种:家长(学生)与管理员;文档里给了新增角色(如教师)的做法。