第 1 章:架构概览¶
多层应用¶
Odoo 遵循 多层架构,即表示层、业务逻辑和数据存储相互分离。更具体地说,它采用三层架构(图片来自 Wikipedia):
表示层由 HTML5、JavaScript 和 CSS 组合而成。逻辑层完全使用 Python 编写,而数据层仅支持 PostgreSQL 作为 RDBMS。
根据模块的范围,Odoo 开发可以在上述任何一层中进行。因此,在进一步深入之前,如果您在这些主题上不具备中级水平,最好先温习一下。
要完成本教程,您需要具备非常基础的 HTML 知识和中级 Python 水平。高级主题则需要更多其他方面的知识。网上有大量免费的教程,我们无法特别推荐某一个,因为这取决于您的背景。
作为参考,这里是官方 Python 教程。
Note
自 15.0 版本起,Odoo 正在积极过渡到使用其自主研发的 OWL 框架 作为表示层的一部分。旧版 JavaScript 框架仍然受支持,但将逐步被弃用。这将在高级主题中进一步讨论。
Odoo 模块¶
服务器端和客户端扩展都打包为 模块 ,这些模块可以有选择地加载到 数据库 中。模块是针对单一目的的函数和数据集合。
Odoo 模块既可以为 Odoo 系统添加全新的业务逻辑,也可以修改和扩展现有业务逻辑。可以创建一个模块将您所在国家的会计规则添加到 Odoo 的通用会计支持中,而另一个模块则可以添加公交车队的实时可视化功能。
Odoo 中的一切都以模块开始,也以模块结束。
术语:开发人员将他们的业务功能组织在 Odoo 模块 中。主要面向用户的模块会被标记并作为 应用 呈现,但大多数模块并不是应用。模块 也可称为 插件 ,Odoo 服务器查找它们的目录构成了 addons_path。
模块的组成¶
一个 Odoo 模块 可以 包含多种元素:
- 业务对象
业务对象(例如发票)声明为 Python 类。得益于 ORM 层,这些类中定义的字段会自动映射到数据库列。
- 对象视图
定义界面显示
- 数据文件
声明模型数据的 XML 或 CSV 文件:
- Web 控制器
处理来自 Web 浏览器的请求
- 静态 Web 数据
网页界面或网站所使用的图片、CSS 或 JavaScript 文件
这些元素都不是必需的。有些模块可能只添加数据文件(例如特定国家的会计配置),而另一些模块可能只添加业务对象。在本次培训中,我们将创建业务对象、对象视图和数据文件。
模块结构¶
每个模块都是 模块目录 中的一个目录。模块目录通过 --addons-path 选项指定。
Odoo 模块由其 清单 声明。
当 Odoo 模块包含业务对象(即 Python 文件)时,它们会组织为一个带有 __init__.py 文件的 Python 包。该文件包含模块中各个 Python 文件的导入指令。
下面是一个简化的模块目录:
module
├── models
│ ├── *.py
│ └── __init__.py
├── data
│ └── *.xml
├── __init__.py
└── __manifest__.py
Odoo 版本¶
Odoo 有 两个版本:Odoo 企业版(授权且共享源代码)和 Odoo 社区版(开源)。除了支持或升级等服务外,企业版还为 Odoo 提供了额外的功能。从技术角度来看,这些功能只是在社区版提供的模块之上安装的新模块而已。
准备好开始了吗?在编写实际代码之前,让我们先前往 下一章 回顾 Odoo 的安装过程。即使 Odoo 已经在您的系统上运行,我们仍强烈建议您读完这一章,以确保我们在开发新应用时处于同一起点。