拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Open edX 项目(Programs)中集成 Zoom LTI Pro 的架构设计与配置指南

Open edX 项目Programs中集成 Zoom LTI Pro 的架构设计与配置指南【免费下载链接】openedx-platformThe Open edX LMS Studio, powering education sites around the world!项目地址: https://gitcode.com/GitHub_Trending/ed/openedx-platform导读本文基于 Open edX 平台中一份已获批准的架构决策文档001-zoom-lti-pro-configuration.rst完整讲解如何在 Program包括硕士项目 masters 与普通项目 regular中接入 Zoom LTI Pro 以提供视频通话Live功能。文章从需求背景、核心决策新建program_live_configuration模型、采用 LTI 1.1、备选方案对比到源码级实现细节模型字段、迁移、Admin 后台、表单与 LTI 配置对象帮助读者理解 Open edX 中以数据模型映射 Program 与 LTI 凭证的落地路径并掌握在 Django Admin 中完成配置的完整方法。背景与动机为什么 Programs 需要 Zoom LTI ProOpen edX 平台不仅承载课程Course还通过lms/djangoapps/learner_dashboard下的 Programs 模块为学习者组织系列学位或职业项目。为了给 Program 提供视频通话video call这类实时互动能力平台决定引入 Zoom 的 LTI 集成方案zoom-lti-pro。关键事实来自决策文档zoom-lti-pro 由任何用户免费安装即可获得可用于 LTI 配置的凭证credentials但平台中缺少一个明确的模型用来把 Zoom 的 LTI 凭证与 Program 建立映射关系因此需要设计并落地一个新的数据模型来承载Program ↔ LTI 凭证的关联。值得注意的是这一需求在粒度上高于课程级在课程层面Open edX 已经有CourseLiveConfiguration见 openedx/core/djangoapps/course_live/models.py来把课程与 LTI 直播提供商关联Program 层需要与之平行的、以program_uuid为主键的配置模型。核心决策新建 program_live_configuration 模型决策文档明确了两项决定新建模型program_live_configuration用它把 LTI 凭证映射到 Program从而让为 Program 添加 Zoom LTI 配置以最小工作量成为可能采用 LTI 1.1由于当前实现的某些约束constraints现阶段用 LTI 1.1 完成 Zoom 的接入。该决策带来的直接后果Consequences是可以在 Programs 中以极小的成本添加 Zoom LTI 配置无需对现有讨论配置代码做大规模改造。为什么选择新建模型而非复用旧模型决策文档记录了两种备选方案Alternatives方案思路缺点方案一复用program_discussion_configuration模型新增一个类型字段用于区分讨论discussion还是直播live配置需要在同一张表中混入两类语义不同的配置靠类型标识区分语义混乱方案二将program_discussion_configuration重命名为更通用的program_lti_configuration需要大规模的代码重构改动成本高、回归风险大最终团队选择新建独立的program_live_configuration模型既避免了破坏现有讨论配置的稳定又保持了直播配置这一业务概念的清晰边界。源码级实现模型、迁移、Admin 与表单该决策在仓库中已经落地。下面从源码出发逐一印证实现细节。1. 抽象基类 AbstractProgramLTIConfiguration在 openedx/core/djangoapps/programs/models.py 中定义了抽象基类AbstractProgramLTIConfiguration它是 Program 层所有 LTI 配置的公共骨架字段类型说明program_uuidCharField主键max_length50db_indexProgram 的 UUID作为主键一个 Program 对应一条配置enabledBooleanField默认 True若关闭则该 Program 关联的 LTI 将被禁用lti_configurationForeignKey →LtiConfigurationSET_NULL可空指向 lti_consumer 应用中的 LTI 配置对象承载实际的凭证与启动 URLprovider_typeCharFieldmax_length50必填LTI 提供商标识例如zoom基类还提供了类方法get(program_uuid)按 UUID 查询配置取第一条这是后续视图与页面逻辑读取配置的入口。2. 落地模型 ProgramLiveConfigurationclass ProgramLiveConfiguration(AbstractProgramLTIConfiguration): .. no_pii: history HistoricalRecords()见 openedx/core/djangoapps/programs/models.py。它继承抽象基类并挂载HistoricalRecords()以支持历史审计simple-history。同文件还定义了姊妹模型ProgramDiscussionsConfiguration用于 Program 讨论配置——这正是决策文档中不重命名、不复用结论的直接体现两个模型并行存在各自独立演进。3. 数据库迁移模型通过迁移 openedx/core/djangoapps/programs/migrations/0015_historicalprogramdiscussionsconfiguration_historicalprogramliveconfiguration_programdiscussionsconfi.py 落地生成四张表program_live_configuration主表program_discussions_configuration讨论配置表HistoricalProgramLiveConfiguration直播配置历史表含history_id、history_date、history_type、history_user等审计字段history_type取值为创建、~修改、-删除HistoricalProgramDiscussionsConfiguration讨论配置历史表。迁移依赖链清晰可见依赖lti_consumer的0013_auto_20210712_1352保证LtiConfiguration表先存在以及programs应用的0014_delete_customprogramsconfig。这从侧面验证了新建独立模型策略的低侵入性——仅追加新表不改动既有表结构。4. Django Admin 后台配置入口在 openedx/core/djangoapps/programs/admin.py 中注册了ProgramLiveConfigurationAdmin继承SimpleHistoryAdmin页面中可直接查看配置历史使用专用表单ProgramLiveConfigurationFormfieldsets 展示字段program_uuid、enabled、lti_configuration、pii_share_username、pii_share_email、provider_typesearch_fieldsprogram_uuid、enabled、provider_typelist_filterenabled、provider_type。运营/管理员可以在 Django Admin 中按program_uuid检索并配置某 Program 的直播ZoomLTI 凭证。5. 表单PII 分享开关openedx/core/djangoapps/programs/forms.py 中的ProgramLiveConfigurationForm是一个 ModelForm额外暴露了两个布尔字段pii_share_username是否将用户名作为 PII 共享给 LTI 提供商pii_share_email是否将邮箱作为 PII 共享给 LTI 提供商。保存时会把这两个开关写回关联的LtiConfiguration对象lti_configuration.pii_share_username/pii_share_email再调用父类save()持久化配置本身。这与课程级course_live的隐私处理逻辑呼应保证调用方按需控制 PII 外发。6. 与课程级 course_live 的平行关系Program 层的实现与课程层CourseLiveConfigurationopenedx/core/djangoapps/course_live/models.py保持了高度一致的设计语言同样的enabled、lti_configuration外键、provider_type字段与get()查询方法。course_live还多一个free_tier字段表示凭证是否由组织全局提供其CourseLiveTabopenedx/core/djangoapps/course_live/tab.py负责在课程内渲染Live标签页、拼接 LTI 启动参数launch URL、client key、secret、config_storeCONFIG_ON_DB并根据角色student/staff/instructor映射 LTI 角色、向 Zoom 传递用户邮箱。从源码结构看Program 级直播配置将复用同一套 LTI 消费链路仅把查询入口从course_key换成program_uuid。如何在 Django Admin 中配置 Program 的 Zoom LTI结合上述源码实际配置步骤如下适用于已部署该模型的 Open edX 实例安装并获取 zoom-lti-pro 凭证按 zoom-lti-pro 官方方式免费部署得到 LTI 1.1 所需的 launch URL、client key 与 client secret。在lti_consumer的LtiConfiguration表中创建配置对象填入lti_1p1_launch_url、lti_1p1_client_key、lti_1p1_client_secretversion设为lti_1p1与决策文档采用 LTI 1.1一致config_store使用CONFIG_ON_DB。进入 Django Admin 的 Programs → Program live configurationsprogram_uuid填写目标 Program 的 UUID主键provider_type填写zoomlti_configuration选择第 2 步创建的LtiConfigurationenabled勾选启用按需勾选pii_share_username/pii_share_email。保存后验证可通过 Admin 的搜索与过滤确认记录创建并借助历史审计查看变更轨迹。注意program_uuid为主键同一 Program 只能存在一条配置如需修改直接编辑原记录即可。总结这份决策文档及其落地代码展示了 Open edX 在给 Programs 增加第三方 LTI 能力时的典型做法以新增专用数据模型的方式在不破坏既有讨论配置的前提下建立 Program 与 LTI 凭证Zoom LTI Pro的稳定映射并通过 Django Admin、simple-history 与表单层提供完整的运维与隐私控制能力。对于需要为 Program 接入 Zoom 或其他 LTI 直播提供商的开发者可以直接参照 models.py、admin.py 与 forms.py 的实现进行二次开发或运维配置。【免费下载链接】openedx-platformThe Open edX LMS Studio, powering education sites around the world!项目地址: https://gitcode.com/GitHub_Trending/ed/openedx-platform创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门