核心架构
核心架构
相关源文件
本章引用的主要源码文件:
mayan/apps/common/api_views.pymayan/apps/common/apps.pymayan/apps/common/classes.pymayan/apps/common/forms.pymayan/apps/common/links.pymayan/apps/common/literals.pymayan/apps/common/serializers.pymayan/apps/common/settings.pymayan/apps/common/tests/mixins.pymayan/apps/common/tests/test_api.pymayan/apps/common/tests/test_links.pymayan/apps/common/urls.pymayan/apps/common/views.pymayan/apps/django_gpg/serializers.pymayan/apps/document_parsing/serializers.pymayan/apps/documents/apps.pymayan/apps/documents/icons.pymayan/apps/documents/links/document_version_links.pymayan/apps/documents/managers.pymayan/apps/documents/permissions.pymayan/apps/documents/tasks.pymayan/apps/documents/urls.pymayan/apps/documents/views/document_type_views.pymayan/apps/documents/views/document_version_views.pymayan/apps/documents/views/document_views.pymayan/apps/events/api_views.pymayan/apps/events/tests/test_api.pymayan/settings/base.py
目的与范围
本文档概述了 Mayan EDMS 的基础架构,涵盖了构成系统基础的核心框架、设计模式以及组件之间的关系。本文档重点介绍了基于 Django 的应用框架、自定义的 MayanAppConfig 系统,以及主要子系统如何集成在一起。
有关特定子系统的详细信息,请参阅:
- 应用框架实现细节:应用框架
- 文档模型与生命周期:文档管理核心
- Web 界面与导航:用户界面系统
- API 设计与端点:REST API 架构
系统基础
Mayan EDMS 基于 Django 3.2+ 构建,并进行了大量的自定义和扩展。该系统采用模块化应用架构,每个功能区域都实现为一个 Django 应用,并通过 MayanAppConfig 框架增强了功能。
Django 设置与应用加载
系统的基础在主设置文件中建立,该文件定义了应用栈和核心配置:
Django 应用栈概览
来源:mayan/settings/base.py:43-133
应用加载遵循特定顺序,以确保正确的初始化依赖关系。核心基础设施应用(如 events 和 appearance)首先加载,然后是认证和权限系统,最后是文档特定功能。
MayanAppConfig 框架
MayanAppConfig 类扩展了 Django 的 AppConfig,以提供增强的应用生命周期管理、URL 路由和组件注册功能:
MayanAppConfig 组件注册流程
来源:mayan/apps/common/apps.py:27-121, mayan/apps/documents/apps.py:209-1216
每个应用的 ready() 方法会执行大量的组件注册,包括模型、事件、权限、菜单链接、仪表盘小部件和导航元素。
核心系统组件
智能设置系统
设置系统提供动态配置管理,支持环境变量和命名空间组织:
配置管理架构
来源:mayan/settings/base.py:18-28, mayan/apps/common/settings.py:15-97
文档管理核心
文档管理系统围绕几个关键模型层级展开:
核心文档模型关系
来源:mayan/apps/documents/managers.py:20-322, mayan/apps/documents/apps.py:221-252
任务处理与后台作业
系统使用 Celery 进行异步任务处理,后端支持 Redis 或 RabbitMQ:
异步任务处理架构
来源:mayan/apps/documents/tasks.py:19-333, mayan/settings/base.py:285-301
请求处理流程
系统通过 Django 的 URL 路由(带有自定义扩展)处理 Web 界面和 API 请求:
请求处理与响应流程
来源:mayan/apps/documents/urls.py:95-689, mayan/apps/documents/views/document_views.py:36-211
导航与菜单系统
用户界面提供了一个动态导航系统,包含上下文感知菜单:
| 组件 | 用途 | 关键类 |
|---|---|---|
| 菜单系统 | 层级导航结构 | menu_main, menu_setup, menu_tools |
| 链接注册表 | 基于权限的动态链接生成 | Link, SourceColumn |
| AJAX 导航 | 部分页面更新 | AjaxRedirect 中间件 |
| 仪表盘小部件 | 可定制的仪表盘组件 | DashboardWidget 子类 |
来源:mayan/apps/common/apps.py:146-153, mayan/apps/documents/apps.py:750-1216
集成模式
模型注册与事件
系统使用集中式注册模式来处理横切关注点:
横切组件注册模式
来源:mayan/apps/documents/apps.py:290-518, mayan/apps/common/classes.py:14-342
数据库与查询优化
系统通过管理器自定义和预取策略实现查询优化:
| 管理器类型 | 用途 | 关键特性 |
|---|---|---|
ValidDocumentManager | 过滤非回收站文档 | 自动回收站过滤 |
ModelQueryFields | 查询优化 | 预取和 select_related 提示 |
TrashCanManager | 回收站文档访问 | 已删除项目的独立查询集 |
来源:mayan/apps/documents/managers.py:189-322, mayan/apps/documents/apps.py:519-554
该架构为文档管理提供了一个可扩展的基础,具有清晰的关注点分离、广泛的定制能力以及强大的集成模式,能够支持企业文档管理所需的复杂工作流。