第1章:架构概述¶
多层应用程序¶
Odoo 采用 多层架构,这意味着表示层、业务逻辑和数据存储是分离的。更具体地说,它使用三层架构(来自 Wikipedia 的图片):
表示层是 HTML5、JavaScript 和 CSS 的组合。逻辑层仅用 Python 编写,而数据层仅支持 PostgreSQL 作为关系型数据库管理系统。
根据你的模块范围,Odoo 开发可以在任何这些层级中进行。因此,在继续之前,如果你在这些主题上没有中级水平,可能有必要先回顾一下相关知识。
为了完成本教程,您需要具备基本的 HTML 知识和中等水平的 Python 编程能力。高级主题将需要在其他相关领域有更多知识。有许多免费的教程可供选择,因此我们无法推荐某一个,因为这取决于您的背景。
如需参考,这是官方的 Python tutorial。
注解
自 15.0 版本起,Odoo 正在积极地将其展示层部分替换为其自主研发的 OWL 框架。遗留的 JavaScript 框架仍然受到支持,但将随时间逐渐被弃用。这将在高级主题中进一步讨论。
Odoo 模块¶
服务器和客户端扩展都打包为*模块*,这些模块可选择性地在*数据库*中加载。模块是一组针对单一用途的功能和数据的集合。
Odoo 模块可以向 Odoo 系统中添加全新的业务逻辑,也可以修改和扩展现有的业务逻辑。可以创建一个模块来将您国家的会计规则添加到 Odoo 的通用会计支持中,而另一个模块则可以添加对公交车队实时可视化支持的功能。
Odoo 中的一切都始于模块,也终于模块。
术语:开发人员将业务功能分组到 Odoo 的 模块 中。主要面向用户的模块会被标记并作为 应用 显示,但大多数模块并不是应用。模块 也可能会被称为 附加组件,Odoo 服务器查找这些模块的目录构成 addons_path
。
模块的组成¶
一个 Odoo 模块 可以 包含以下一些元素:
- 业务对象
一个业务对象(例如发票)被声明为一个 Python 类。这些类中定义的字段通过 ORM(对象-关系映射) 层自动映射到数据库列。
- 对象视图
定义用户界面显示
- 数据文件
XML 或 CSV 文件,用于声明模型数据:
- Web 控制器
处理来自网页浏览器的请求
- 静态网页数据
用于网页界面或网站的图片、CSS 或 JavaScript 文件
这些元素都不是必需的。某些模块可能仅添加数据文件(例如,特定国家的会计配置),而其他模块可能仅添加业务对象。在此次培训中,我们将创建业务对象、对象视图和数据文件。
模块结构¶
每个模块都是 模块目录 中的一个目录。模块目录通过使用 --addons-path
选项进行指定。
一个 Odoo 模块通过其 清单 进行声明。
当一个 Odoo 模块包含业务对象(即 Python 文件)时,它们被组织为一个 Python 包,其中包含一个 __init__.py
文件。该文件包含模块中各种 Python 文件的导入指令。
这里是一个简化的模块目录:
module
├── models
│ ├── *.py
│ └── __init__.py
├── data
│ └── *.xml
├── __init__.py
└── __manifest__.py
Odoo 版本¶
Odoo is available in two versions: Odoo Enterprise (licensed & shared sources) and Odoo Community (open-source). In addition to services such as support or upgrades, the Enterprise version provides extra functionalities to Odoo. From a technical point-of-view, these functionalities are simply new modules installed on top of the modules provided by the Community version.
准备好开始了吗?现在是时候 编写您自己的应用 了!