企业内部学习系统:课程与考试、积分商城、活动广场(培训报名)、员工账户与通知等。
当前:1.2.3(见仓库根目录 VERSION)
| 类别 | 说明 |
|---|---|
| 后台工作台 | 新增管理员工作台首页(快捷入口、平台总览、图表面板、暗色主题适配);支持按时间范围切换图表数据与 PNG 导出 |
| 后台导航与主题 | 重构后台导航模板与主题样式(admin_theme.css / admin_dashboard.css),优化可读性、层次与交互反馈 |
| 图表接口 | 新增后台图表数据接口(users/admin-dashboard/charts/),提供活跃人数、学习时长、账号状态占比、学习运营雷达等数据 |
| 管理员快捷入口 | 员工模型新增 admin_shortcuts,支持管理员自定义 8 个常用功能入口并持久化排序 |
| 学习诚信(课程) | 课程支持切屏/失焦监测策略(宽限、最小时长、告警阈值、上限与超限动作);超限可限制“标记学完” |
| 学习诚信(考试) | 考试支持切屏监测会话;超限可自动记 0 分交卷(已通过者不覆盖),并记录切屏次数 |
| 必修视频完课规则 | 必修视频课新增“完整观看确认”机制(支持播放结束自动标记与嵌入视频人工确认) |
| 数据模型与后台 | 新增课程/考试监测相关模型与后台管理项(CourseFocusAccum、ExamFocusSession、focus_forced_zero 等) |
| 类别 | 说明 |
|---|---|
| MySQL 字符集 | 迁移 courses.0014 / 0015 全库转 utf8mb4;users.0015 单独转换 users_employee(课程正文、签名档等含 emoji/特殊符号);自定义 MySQL 后端连接后 SET NAMES utf8mb4;命令 ensure_mysql_utf8mb4 供手工补救 |
| 后台体验 | 培训活动、学习积分流水 去掉 date_hierarchy,避免 MySQL 未导入时区表时的日期分层报错 |
| 员工积分 | 后台 员工 编辑页增加 积分调整(增减 + 说明),写入 积分流水(来源「管理员调整」);PointsLedger.amount 支持正负整数 |
| 前台 | 知识殿堂 保存签名/头像 若仍遇 1366,返回友好提示并引导迁移 |
部署请执行:python manage.py migrate(至少 courses.0015、shop.0016、users.0015)。
| 类别 | 说明 |
|---|---|
| 前台信息架构 | 主导航「知识殿堂」;原「我的课程」入口更名为「我的学习」;我的培训内展示必修在线课等 |
| 学习任务 | 知识殿堂首页「学习任务」:合并指派必修与正式考试(按期限/开考/截止与提醒窗口排序高亮);UI 强化「须完成」提示 |
| 必修课程(后台) | 课程支持必修完成期限、提醒窗口(天);前台培训页、课程详情与学习任务联动展示 |
| 考试提醒 | 正式考试按开始/结束时间与默认 7 天考前/截止前提醒窗口进入学习任务(已通过考试不占位) |
| 学习偏好 / 提醒 | 学习提醒与完课相关设置(含迁移);可选站内提醒逻辑扩展(见 courses/learning_reminders.py 等) |
| 部署与账号 | 迁移预置超级管理员(工号 admin);python manage.py bootstrap_admin 用于空库或忘密重置 |
| 其他 | 「我的报名」页去掉冗长说明文案;多处面包屑/返回链接与文案统一为「知识殿堂」 |
部署本版本请务必执行:python manage.py migrate。
- Python 3.12、Django 4.2
- 数据库:SQLite(本地开发)/ MySQL 5.7+(生产,通过 PyMySQL 连接)
- 可选:阿里云 OSS 媒体存储
本项目使用 Conda 管理 Python 环境。
# 创建环境(仅需一次)
conda create -n e-learning python=3.12 -y
# 激活环境(每次开发前执行)
conda activate e-learning
# 安装依赖
pip install -r requirements.txtconda activate e-learning
cp env.example .env # 按需编辑,勿将密钥提交仓库
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver数据库默认使用项目根目录 db.sqlite3(无需安装 MySQL)。生产环境设置 USE_MYSQL=1 并配置 MYSQL_* 环境变量即可切换到 MySQL。
首次部署或空库:迁移会尝试创建预置管理员;若无法登录,执行:
python manage.py bootstrap_admin登录后台时「用户名」为 工号 admin,默认密码见命令输出;上线后请立即修改密码。
复制 env.example 为 .env。常用项:
| 变量 | 默认值 | 说明 |
|---|---|---|
USE_MYSQL |
(空) | 设为 1 启用 MySQL,否则使用 SQLite |
MYSQL_DATABASE |
learning_db |
MySQL 数据库名 |
MYSQL_HOST |
127.0.0.1 |
MySQL 主机地址 |
MYSQL_PORT |
3306 |
MySQL 端口 |
MYSQL_USER |
root |
MySQL 用户名 |
MYSQL_PASSWORD |
(空) | MySQL 密码 |
USE_OSS_MEDIA |
0 |
本地预览保持 0(使用本机 media/);生产 / Sep 使用 OSS 时设为 1 |
OSS_ENDPOINT |
公网北京 OSS | 服务端 oss2 用;机房可设为 内网(如 *-internal.aliyuncs.com) |
OSS_PUBLIC_ENDPOINT |
(空) | 浏览器加载封面/头像/签名视频用;未设且 OSS_ENDPOINT 为内网时,代码会去掉 -internal 推导公网 |
OSS_BUCKET_NAME 等 |
见 env.example |
与阿里云控制台 Bucket、AK/SK 一致 |
Sep 环境可复制 config/env.sep 为 .env 并补全密钥(或由运维注入环境变量)。
| 现象 | 原因 | 项目内处理 |
|---|---|---|
后台/前台保存含 emoji、特殊符号 报 1366(如 description、signature) |
表列为旧 utf8(3 字节) |
迁移 courses.0014 / 0015 全库转 utf8mb4;users.0015 单独兜底 users_employee(签名档等);连接层 SET NAMES utf8mb4;部署后 python manage.py migrate。仍失败可:python manage.py ensure_mysql_utf8mb4 |
后台列表报 invalid datetime / 时区定义 |
USE_TZ=True 时「按日期分层」依赖 MySQL 时区表 |
Training、PointsLedger 已去掉 date_hierarchy;根治需在 DB 主机导入时区表:mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql |
部署检查(MySQL 生产):
python manage.py migrate(至少courses.0015与users.0015)- 确认
learning_system/settings.py中 MySQL 的OPTIONS含charset: utf8mb4与NAMES utf8mb4(见仓库当前文件) - 仍出现 1366:检查 DB 账号是否有 ALTER 权限,或联系 DBA 对库执行
utf8mb4转换
| 用途 | 地址 | 说明 |
|---|---|---|
| GitHub(同步) | https://github.com/gillianmeng/LS | 默认分支 main |
| GitLab | http://git.snowballfinance.com/hr/e-learning | sep:集成分支(与当前 VERSION / README 版本一致);prod:生产发布 |
克隆 GitLab 示例:
# 生产
git clone -b prod http://git.snowballfinance.com/hr/e-learning.git
# 集成分支 sep(当前版本见仓库 VERSION / README)
git clone -b sep http://git.snowballfinance.com/hr/e-learning.git内部使用;如需对外分发请单独约定许可条款。