agentic_huge_data_base / wiki
页面 Mayan EDMS · 3.1 应用框架·DeepWiki 中文全文译文

3.1 · 应用框架(Application Framework)

企业电子文档治理 · 聚焦本章的模块关系、源码依据与实现要点。

项目Mayan EDMS 章节3.1 状态全文译文 模块配置治理、文档对象与元数据、系统架构、安装与启动
源码线索
  • mayan/apps/common/api_views.py
  • mayan/apps/common/apps.py
  • mayan/apps/common/classes.py
  • mayan/apps/common/forms.py
  • mayan/apps/common/links.py
  • mayan/apps/common/literals.py
  • mayan/apps/common/serializers.py
  • mayan/apps/common/settings.py
  • mayan/apps/common/tests/mixins.py
  • mayan/apps/common/tests/test_api.py
模块标签
  • 配置治理
  • 文档对象与元数据
  • 系统架构
  • 安装与启动
  • 测试、发布与运维

章节正文

应用框架

应用框架

相关源文件

本章引用的主要源码文件:

  • mayan/apps/common/api_views.py
  • mayan/apps/common/apps.py
  • mayan/apps/common/classes.py
  • mayan/apps/common/forms.py
  • mayan/apps/common/links.py
  • mayan/apps/common/literals.py
  • mayan/apps/common/serializers.py
  • mayan/apps/common/settings.py
  • mayan/apps/common/tests/mixins.py
  • mayan/apps/common/tests/test_api.py
  • mayan/apps/common/tests/test_links.py
  • mayan/apps/common/urls.py
  • mayan/apps/common/views.py
  • mayan/apps/django_gpg/serializers.py
  • mayan/apps/document_parsing/serializers.py
  • mayan/apps/events/api_views.py
  • mayan/apps/events/tests/test_api.py
  • mayan/settings/base.py

目的与范围

本文档介绍了支撑 Mayan EDMS 的基础应用框架。它解释了基于 Django 的架构、扩展了 Django 标准应用配置的 MayanAppConfig 系统、各应用共享的通用工具,以及各个应用的结构和初始化方式。

关于文档管理核心模型及其关系,请参阅文档管理核心。关于用户界面系统和导航框架的详细信息,请参阅用户界面系统。关于配置管理的具体内容,请参阅配置管理

Django 基础与设置

Mayan EDMS 基于 Django 构建,遵循 Django 的应用架构,并通过自定义功能对其进行了扩展。其基础在主设置配置中建立。

设置结构

主要的 Django 配置在 mayan/settings/base.py:1-373 中定义,它建立了核心 Django 设置并集成了 Smart Settings 系统。

Mayan EDMS · 设置结构 · 图 1
Mayan EDMS · 设置结构 · 图 1

设置配置过程

来源:mayan/settings/base.py:18-28

MayanAppConfig 系统

MayanAppConfig 类扩展了 Django 标准的 AppConfig,为 URL 配置、命名空间管理和应用初始化提供了增强功能。

MayanAppConfig 架构
Mayan EDMS · MayanAppConfig 架构 · 图 2
Mayan EDMS · MayanAppConfig 架构 · 图 2

MayanAppConfig 类结构

核心 MayanAppConfig 类为所有 Mayan 应用提供了基础:

属性用途示例
app_namespace应用的 URL 命名空间'documents'
app_url应用的基础 URL 路径'documents'
has_rest_api指示应用是否提供 REST APITrue
has_tests指示应用是否包含测试套件True

来源:mayan/apps/common/apps.py:27-121

URL 配置过程

configure_urls() 方法处理每个 Mayan 应用的动态 URL 注册:

Mayan EDMS · URL 配置过程 · 图 3
Mayan EDMS · URL 配置过程 · 图 3

来源:mayan/apps/common/apps.py:31-117

应用结构与组织

Mayan EDMS 应用遵循一致的结构,并在 Django 的 INSTALLED_APPS 配置中按逻辑类别组织。

应用类别
Mayan EDMS · 应用类别 · 图 4
Mayan EDMS · 应用类别 · 图 4

应用加载顺序

INSTALLED_APPS 中的顺序对于正确初始化至关重要:

  1. Events - 必须最先加载,以预加载所有事件定义
  2. Appearance - 尽早加载以允许模板覆盖
  3. Logging - 尽早加载以确保日志可用
  4. Task Manager - 在其他应用使用队列之前创建队列
  5. User Management - 必须在认证之前加载
  6. 基础设施 - ACL、通用工具、权限
  7. 文档应用 - 核心文档功能
  8. 功能应用 - 依赖于核心的高级功能

来源:mayan/settings/base.py:43-133

通用工具与类

mayan.apps.common 包提供了整个应用框架中使用的共享工具。

ModelCopy 系统

ModelCopy 类提供了一个复杂的对象复制系统,支持关系、唯一字段和条件逻辑:

Mayan EDMS · ModelCopy 系统 · 图 5
Mayan EDMS · ModelCopy 系统 · 图 5

ModelCopy 注册示例

# 注册模型以支持复制
ModelCopy(
    model=MyModel,
    bind_link=True,  # 向对象菜单添加复制链接
    register_permission=True,  # 注册复制权限
    condition=lambda instance: instance.can_be_copied()  # 复制条件
).add_fields(
    field_names=['name', 'description', 'category'],
    field_values={'status': 'draft'},  # 新实例的静态值
    field_value_templates={'new_name': '{instance.name}_copy'}  # 模板值
)

来源:mayan/apps/common/classes.py:14-294

工具类
用途关键方法
MissingItem跟踪缺失的系统依赖get_missing(), condition()
PropertyHelper向模型动态添加属性get_result(), constructor

来源:mayan/apps/common/classes.py:296-342

URL 配置与路由

Mayan EDMS 使用一个复杂的 URL 路由系统,支持标准应用 URL 和透传模式。

URL 模式类型
Mayan EDMS · URL 模式类型 · 图 6
Mayan EDMS · URL 模式类型 · 图 6

通用应用 URL 配置示例

通用应用展示了典型的 URL 模式组织方式:

  • 标准 URL:带有命名空间 common: 的视图
  • 杂项 URL:工具端点,如 favicon、对象复制
  • 透传 URL:Django 管理界面
  • API URL:REST API 端点

来源:mayan/apps/common/urls.py:1-47

集成点

应用框架提供了多个集成点,用于连接不同的系统组件。

事件系统集成
Mayan EDMS · 事件系统集成 · 图 7
Mayan EDMS · 事件系统集成 · 图 7

CommonApp 集成示例

CommonApp 类展示了典型的集成模式:

  1. Django 管理自动发现:自动注册管理界面
  2. AJAX 模板注册:注册可复用的模板组件
  3. 菜单系统绑定:将链接连接到菜单结构
  4. 信号处理器注册:连接到系统级事件

来源:mayan/apps/common/apps.py:134-162

权限系统集成

框架通过 ModelPermission 类和 ACL 绑定与权限系统集成:

集成点用途实现方式
模型注册为模型注册权限ModelPermission.register()
链接绑定添加受权限保护的链接menu_object.bind_links()
ACL 集成对象级权限检查acl_bind_link=True

来源:mayan/apps/common/classes.py:59-63