Skip to content

gillianmeng/LS

Repository files navigation

LS(Learning System)

企业内部学习系统:课程与考试、积分商城、活动广场(培训报名)、员工账户与通知等。

版本

当前:1.2.3(见仓库根目录 VERSION

1.2.3 相对 1.2.2 的更新

类别 说明
后台工作台 新增管理员工作台首页(快捷入口、平台总览、图表面板、暗色主题适配);支持按时间范围切换图表数据与 PNG 导出
后台导航与主题 重构后台导航模板与主题样式(admin_theme.css / admin_dashboard.css),优化可读性、层次与交互反馈
图表接口 新增后台图表数据接口(users/admin-dashboard/charts/),提供活跃人数、学习时长、账号状态占比、学习运营雷达等数据
管理员快捷入口 员工模型新增 admin_shortcuts,支持管理员自定义 8 个常用功能入口并持久化排序
学习诚信(课程) 课程支持切屏/失焦监测策略(宽限、最小时长、告警阈值、上限与超限动作);超限可限制“标记学完”
学习诚信(考试) 考试支持切屏监测会话;超限可自动记 0 分交卷(已通过者不覆盖),并记录切屏次数
必修视频完课规则 必修视频课新增“完整观看确认”机制(支持播放结束自动标记与嵌入视频人工确认)
数据模型与后台 新增课程/考试监测相关模型与后台管理项(CourseFocusAccumExamFocusSessionfocus_forced_zero 等)

1.2.0 相对 1.1.0 的更新

类别 说明
MySQL 字符集 迁移 courses.0014 / 0015 全库转 utf8mb4users.0015 单独转换 users_employee(课程正文、签名档等含 emoji/特殊符号);自定义 MySQL 后端连接后 SET NAMES utf8mb4;命令 ensure_mysql_utf8mb4 供手工补救
后台体验 培训活动、学习积分流水 去掉 date_hierarchy,避免 MySQL 未导入时区表时的日期分层报错
员工积分 后台 员工 编辑页增加 积分调整(增减 + 说明),写入 积分流水(来源「管理员调整」);PointsLedger.amount 支持正负整数
前台 知识殿堂 保存签名/头像 若仍遇 1366,返回友好提示并引导迁移

部署请执行:python manage.py migrate(至少 courses.0015shop.0016users.0015)。

与 1.0.1 的区别(1.1.0 更新摘要)

类别 说明
前台信息架构 主导航「知识殿堂」;原「我的课程」入口更名为「我的学习」;我的培训内展示必修在线课等
学习任务 知识殿堂首页「学习任务」:合并指派必修正式考试(按期限/开考/截止与提醒窗口排序高亮);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.txt

本地运行

conda 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 并补全密钥(或由运维注入环境变量)。

MySQL:已知问题与代码内修复

现象 原因 项目内处理
后台/前台保存含 emoji、特殊符号1366(如 descriptionsignature 表列为旧 utf8(3 字节) 迁移 courses.0014 / 0015 全库转 utf8mb4users.0015 单独兜底 users_employee(签名档等);连接层 SET NAMES utf8mb4;部署后 python manage.py migrate。仍失败可:python manage.py ensure_mysql_utf8mb4
后台列表报 invalid datetime / 时区定义 USE_TZ=True 时「按日期分层」依赖 MySQL 时区表 TrainingPointsLedger 已去掉 date_hierarchy;根治需在 DB 主机导入时区表:mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql

部署检查(MySQL 生产):

  1. python manage.py migrate(至少 courses.0015users.0015
  2. 确认 learning_system/settings.py 中 MySQL 的 OPTIONScharset: utf8mb4NAMES utf8mb4(见仓库当前文件)
  3. 仍出现 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

许可

内部使用;如需对外分发请单独约定许可条款。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors