二次开发:主题、XBlock 与 API
Open edX 是 Django 单体 + 微服务的组合,绝大多数定制不需要动核心代码,通过主题、插件与 API 三个层面即可完成。
1. 主题定制
平台界面基于 Mako 模板 + Sass 样式,官方推荐的做法是制作独立主题包:
- Fork 官方主题仓库作为起点,修改品牌色、Logo、页头页脚模板;
- 在 Tutor 中启用:
tutor config save --set ENABLE_THEMES=true并挂载主题目录; - 重新构建前端资源(打开 edX Platform 中的 Comprehensive Theming 文档对照调整)。
建议主题改动集中在品牌层(Logo / 配色 / 页脚 / 登录页),避免大面积改模板——大版本升级时模板差异越小,维护成本越低。
2. XBlock 插件开发
XBlock 是教学组件的插件标准,官方的习题、视频都是 XBlock。开发一个自己的交互组件:
# 用官方脚手架创建项目
pip install xblock-sdk
# XBlock 核心三件套:
# XBlock 类:字段(field)、视图(view)、范围(scope)
# student_view():学员端渲染
# studio_view():教师端配置表单
- 无状态内容用
Scope.content,学员作答数据用Scope.user_state; - 通过 Tutor 的
MOUNT机制挂载到平台,XBlock 配置中启用; - 发布到 PyPI 后即可在任意 Open edX 平台安装使用。
3. 平台 API
平台暴露完整的 REST API(/api/ 目录),配合 OAuth2 客户端凭证认证:
- 课程:列表、详情、结构树;
- 用户与选课:注册、选课状态、进度;
- 成绩:成绩册、证书状态;
- 常用对接场景:统一身份认证(SSO / CAS / OAuth)、企业微信与钉钉通知、教务系统成绩回传。
# 创建 OAuth2 客户端后调用示例
curl -H "Authorization: Bearer $TOKEN" \
https://your-domain.com/api/courses/v1/courses/
4. 深度改造须知
- 改核心代码请走 Fork + 补丁管理,并通过 Tutor 的 Mount 替换容器内代码,不要直接改容器;
- 大版本升级前阅读官方 Release Notes,重点检查主题模板与 XBlock 兼容性;
- 所有自定义内容纳入 Git 管理,形成「Tutor 配置 + 主题 + 插件 + 补丁」四件套的部署资产。