
Open edX common/djangoapps 共享 Django 应用全解LMS 与 Studio 共用的核心应用体系【免费下载链接】openedx-platformThe Open edX LMS Studio, powering education sites around the world!项目地址: https://gitcode.com/GitHub_Trending/ed/openedx-platform本文基于 Open edXedx-platform官方文档 common_djangoapps.rst 展开。该文档的定位是common/djangoapps目录的 Docstring 参考索引这一目录“包含那些设计为在 LMS 和 Studio 中同时使用的 Django 应用”。读完本文你将掌握该目录下每个共享应用的职责边界、在 LMS/Studio 两侧INSTALLED_APPS中的实际注册情况以及如何顺着文档的 toctree 找到各模块的 Sphinx 自动生成页面。文档本身说明了什么common_djangoapps.rst 全文很短但信息明确由两部分构成一句话目录说明This directory contains Django applications intended to be used in both the LMS and Studio.即common/djangoapps是 LMS 与 CMSStudio共享的 Django app 集合一个 Sphinx toctreemaxdepth: 2列出 13 个子页面每个子页面形如common/djangoapps/app/modulestoctree 条目原文相对路径对应仓库目录common/djangoapps/course_action_state/modulescourse_action_statecommon/djangoapps/course_modes/modulescourse_modescommon/djangoapps/database_fixups/modulesdatabase_fixupscommon/djangoapps/edxmako/modulesedxmakocommon/djangoapps/enrollment/modules见下文说明common/djangoapps/entitlements/modulesentitlementscommon/djangoapps/pipeline_mako/modulespipeline_makocommon/djangoapps/static_replace/modulesstatic_replacecommon/djangoapps/status/modulesstatuscommon/djangoapps/student/modulesstudentcommon/djangoapps/third_party_auth/modulesthird_party_authcommon/djangoapps/track/modulestrackcommon/djangoapps/util/modulesutilcommon/djangoapps/xblock_django/modulesxblock_django这些modules页面并非仓库中手写的.rst文件而是 Sphinx 通过 autodoc 从各应用的 Python 模块 docstring 生成的 API 参考页它们与 index.rst 中的cms_index、common_index、lms_index、openedx/modules、xmodule/modules共同组成整个 Python Docstrings 参考区。需要说明的一点是toctree 中的common/djangoapps/enrollment在当前的common/djangoapps目录列表中并无对应目录从源码结构看这条索引项属于历史遗留条目该功能的实现应已不在common/djangoapps下。为什么需要“共享应用”这一层Open edX 的仓库按三个顶层应用划分lms/学习平台、cms/Studio和common/。同目录索引文档 common_index.rst 明确写道common目录是“LMS 和 Studio 共用的各种包的聚集地。这是一个遗留的代码组织决策目前计划将这里的大部分代码最终迁入openedx包或拆分为独立安装的包。”这给出了一条重要的阅读提示common/djangoapps下的应用不是 LMS 或 Studio 的“私有”逻辑凡是涉及“两个站点都要用”的能力——账户体系、认证、跟踪、模板引擎、课程模式与授权——都会沉淀到这里。因此理解这个目录就是理解 Open edX 双侧共用的能力底座。哪些应用真正被 LMS / Studio 注册Docstring 索引只列出页面真正的“生效证据”在两侧的配置文件中。检索 lms/envs/common.py 的INSTALLED_APPS与 cms/envs/common.py可以得到每个共享应用的注册位置应用LMS 注册lms/envs/common.pyStudio 注册cms/envs/common.pystatusL1830common.djangoapps.status—LMS 侧状态端点edxmakoL1833EdxMakoConfigL751EdxMakoConfigstatic_replaceL1835L753studentL1857StudentConfigL735注释misleading name due to sharing with lmstrackL1862L747utilL1864—third_party_authL1887—Studio 使用其他 SSO 集成路径course_modesL1929CourseModesConfigL773entitlementsL1935EntitlementsConfigL872course_action_stateL1953L794xblock_djangoL1987L805database_fixupsL2039L855pipeline_mako未在 LMS 检索结果中出现L875两点值得注意pipeline_mako只出现在 Studio 的INSTALLED_APPS中cms/envs/common.py结合其目录结构helpers/templates/从源码结构看它用于 Studio 侧渲染认证 pipeline 的 Mako 登录页面而非 LMS 的学习页面student应用两侧的注册名不同LMS 与 Studio 都以common.djangoapps.student注册Studio 侧还带有“名称有误导性因为它与 lms 共享”的注释这正是共享应用最典型的形态——同一份代码服务两个站点。各共享应用职责详解下面按 toctree 顺序逐一说明各应用。目录结构与职责判断均基于当前仓库中实际存在的文件。course_action_state课程行为状态记录目录包含 models.py、managers.py、admin.py与migrations/。从命名与文件构成看该应用负责记录用户对课程内容的行为状态如已读、已完成之类的“action state”数据并通过 admin 提供后台查看入口。它在 LMS 与 Studio 两侧均注册说明两侧都需要查询或维护这类状态数据。course_modes课程模式选课计划course_modes 目录包含models.py、api.py、helpers.py、signals.py、rest_api/、urls.py与views.py是共享应用中功能面较完整的一个。其 apps.py 中的CourseModesConfig在ready()阶段导入signals模块以挂载信号监听这是典型的“应用启动即接线”的 Django 模式。课程模式course mode对应付费/审计等不同选课轨道涉及注册、支付与学习权限因此天然需要 LMS学员选课与 Studio教师配置轨道双侧共同依赖并提供rest_api供外部系统如 MFE消费。database_fixups数据库订正辅助database_fixups 目录仅含migrations/无 models。从源码结构看该应用不承担运行时业务而是通过迁移文件为生产数据库提供结构订正fixup通道——这类“只为执行一次性数据/结构修复而存在”的 app 在 Django 项目中是一种常见做法两侧站点都注册它以保证迁移可执行。edxmakoMako 模板的 Django 后端edxmako 是一个把 Mako 模板引擎接入 DjangoTEMPLATES框架的应用目录中包含backend.py、makoloader.py、request_context.py、services.py、shortcuts.py等。其 apps.py 的ready()方法遍历settings.TEMPLATES为每个BACKEND含edxmako的后端按namespace与DIRS配置注册 lookup 目录并特别注明“该方法在应用启动期间可能被多次调用必须保证幂等”。配置侧的印证Studio 侧 cms/envs/common.py 中声明了BACKEND: common.djangoapps.edxmako.backend.MakoLMS 侧 lms/envs/common.py 的模板上下文处理器列表中包含common.djangoapps.edxmako.shortcuts.marketing_link_context_processor。也就是说Open edX 的大量 HTML 模板包括lms/templates/、cms/templates/下的 mako 页面正是经由这一应用被 Django 渲染的它是整个共享层中最“基础设施级”的组件之一。entitlements课程授权Entitlementsentitlements 包含models.py、api.py、rest_api/、management/、tasks.py与signals.py其 apps.py 定义EntitlementsConfig。授权entitlement记录“某用户被授予了某课程某种付费轨道的资格”与course_modes配合构成完整的选课/付费链路entitlement 是资格凭证mode 是具体轨道。两侧注册LMS L1935、Studio L872且自带management命令与tasks.py说明它还需要离线任务与运维命令支撑。pipeline_mako认证 pipeline 的 Mako 模板pipeline_mako 目录只有helpers/、templates/与tests/没有 models 与 apps 配置类。结合它仅注册于 Studio见上文表格从源码结构看它负责第三方认证 pipeline 各步骤输入凭据、确认关联等的页面模板渲染属于“纯视图模板”型应用。static_replace静态资源引用替换static_replace 包含wrapper.py、services.py、admin.py、management/与models.py。从命名与文件构成看该应用用于对页面/模板中的静态资源引用做集中替换例如 CDN 域名、资源版本路径的统一改写并提供 admin 与 management 入口配置替换规则。两侧均注册LMS L1835、Studio L753。status轻量状态端点status 目录很小models.py、status.py与tests.py。从源码结构看它提供一个极简的应用状态/存活检查端点常用于部署后的健康探测LMS 侧在 lms/envs/common.py 注册。student账户与学员共享逻辑student 是共享目录中体量最大的应用之一admin.py、api.py、auth.py、forms.py、emails.py、helpers.py、constants.py、apps.py等。从文件构成看它承载账户注册/登录表单、密码与邮箱变更、学员状态standing等横切两站的账户能力。配置侧的印证非常直接LMSlms/envs/common.py 的中间件栈包含common.djangoapps.student.middleware.UserStandingMiddlewareL1857 注册StudentConfigStudiocms/envs/common.py 同样挂载UserStandingMiddleware并在 L735 注册时注释“misleading name due to sharing with lms”。中间件挂载在请求链路上意味着“用户状态拦截”如冻结账户无法访问是两侧统一执行的策略。third_party_auth第三方认证SAML/OAuth 等third_party_auth 目录包含api/、appleid.py、identityserver3.py、lti.py、decorators.py、exceptions.py、apps.py等是 Open edX 对接外部身份提供方SAML、OAuth2 等的共享层。LMS 侧配置中的引用密集且具体lms/envs/common.pySOCIAL_AUTH_STRATEGY common.djangoapps.third_party_auth.strategy.ConfigurationModelStrategyL339即 social-auth 的策略直接实现于该应用SOCIAL_AUTH_CLEAN_USERNAME_FUNCTION common.djangoapps.third_party_auth.models.clean_usernameL346SOCIAL_AUTH_PIPELINE中十余个环节均为common.djangoapps.third_party_auth.pipeline.*如parse_query_params、associate_by_email_if_login_api、ensure_redirect_url_is_safe、set_logged_in_cookies、login_analyticsL365–L383中间件栈中的common.djangoapps.third_party_auth.middleware.ExceptionMiddlewareL1307负责把认证异常转成用户可理解的错误页。这组配置完整展示了该应用如何“接管”整个第三方登录链路从策略、pipeline 到异常处理全部落在共享层内。track事件跟踪Segment 上报track 包含middleware.py、backends/、segment.py、tracker.py、event_transaction_utils.py与management/。两侧均在中间件栈挂载LMS 侧 lms/envs/common.py 的common.djangoapps.track.middleware.TrackMiddlewareStudio 侧 cms/envs/common.py 同名条目。从源码结构看TrackMiddleware拦截请求以采集分析事件backends/提供可插拔的上报后端如segment.py对接 Segment 协议从而实现 LMS 与 Studio 行为数据的统一埋点。util跨应用工具函数库util 是一组无状态工具模块date_utils.py、cache.py、db.py、file.py、json_request.py、config_parse.py、block_utils.py、course.py等。它在 LMS 侧 lms/envs/common.py 注册为 app保证其模型/迁移可用代码中也被直接引用例如 L933 附近注释提及common.djangoapps.util.date_utils.strftime_localized。可以将其理解为共享层的“标准库”凡是需要两侧一致的日期、缓存、数据库访问行为都从这里取用。xblock_djangoXBlock 与 Django 的桥接xblock_django 包含api.py、models.py、user_service.py、constants.py、management/与migrations/。从文件构成看它是 XBlock 运行时与 Django 之间的粘合层user_service.py把 Django 用户体系适配成 XBlock 服务models.py/api.py则提供 XBlock 持久化相关的模型与查询入口。LMS 与 Studio 双侧注册LMS L1987、Studio L805因为两侧都要渲染和编辑课程组件XBlock。补充split_modulestore_django目录中存在、toctree 未列仓库中还存在 split_modulestore_django含 apps.py 的SplitModulestoreDjangoBackendAppConfig、admin.py、models.py、migrations/它同样被两侧注册LMS L1858、Studio L731负责 draft/published 双版本 modulestore 的后端配置。它未出现在文档 toctree 中说明 common_djangoapps.rst 的页面列表与当前目录存在轻微的滞后阅读时应以实际目录与配置为准。如何使用这份 Docstring 索引对于开发者与检索 Agent这份文档的正确用法是把它当作“入口页”先在 common_djangoapps.rst 确认你要找的共享应用是否在列顺 toctree 进入对应的modules页面由 autodoc 从源码 docstring 生成查看各模块、类、函数的 API 说明需要确认“该应用在某个站点是否真的生效、如何接线”时回到lms/envs/common.py与cms/envs/common.py的INSTALLED_APPS、中间件栈与 social-auth 配置交叉验证本文第二节表格给出了全部锚点若 toctree 条目在目录中找不到如enrollment说明该条目为历史遗留应到lms/djangoapps、cms/djangoapps或openedx/下继续查找对应实现。小结common_djangoapps.rst 以 13 个 toctree 条目勾勒出 Open edX 共享 Django 应用的全景course_action_state、course_modes、database_fixups、edxmako、entitlements、pipeline_mako、static_replace、status、student、third_party_auth、track、util、xblock_django。它们覆盖模板渲染、账户与认证、事件埋点、选课授权、XBlock 桥接等横切能力并通过lms/envs/common.py与cms/envs/common.py两侧的注册得到逐一印证。结合 common_index.rst 关于“遗留组织方式、未来向openedx包迁移”的说明可以预期该目录在后续版本中会持续瘦身——理解其当前结构是阅读 Open edX 双侧共享逻辑的最佳起点。【免费下载链接】openedx-platformThe Open edX LMS Studio, powering education sites around the world!项目地址: https://gitcode.com/GitHub_Trending/ed/openedx-platform创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考