02. Odoo 核心框架探究
在了解了工程目录后,我们进入 odoo/ 目录,这是 Odoo 作为一个 Application Server 的核心所在。
1. 启动入口 (odoo-bin)
Odoo 的启动非常简单,查看 odoo-bin 文件:
python
#!/usr/bin/env python3
import odoo.cli
if __name__ == "__main__":
odoo.cli.main()
- 逻辑 :它仅仅是调用了
odoo.cli.main()。 - 扩展 :所有的命令行操作(如启动服务器、生成脚手架、部署)都由
odoo.cli模块管理。
2. 核心目录分析 (odoo/)
这个目录包含了构建企业级应用所需的所有基础设施:
| 目录/文件 | 作用说明 |
|---|---|
cli/ |
Command Line Interface 。包含 command.py, server.py 等。当我们运行 ./odoo-bin -c odoo.conf 时,就是这里的代码在解析参数并启动服务。 |
http.py |
Web 框架入口。Odoo 基于 werkzeug 实现了自己的 Web 框架。它负责处理所有的 HTTP 请求,无论是网页访问还是 JSON-RPC 接口调用。 |
api/ |
新 API 定义 。定义了 Environment (env),这是我们在开发中最常用的对象,用于操作数据库和上下文。 |
models/ |
ORM 模型基类 。定义了 Model, TransientModel 等基类。所有的业务对象(如 客户、订单)最终都继承自这里的类。 |
fields/ |
字段类型定义 。定义了 Char, Integer, Many2one 等字段类型。 |
sql_db.py |
数据库驱动。负责 PostgreSQL 连接池的管理和 SQL 执行。 |
service/ |
服务进程管理。管理 WSGI Server 的启动、Cron 作业的调度等。 |
3. 关键机制速览
ORM (对象关系映射)
Odoo 最大的特色是其强大的 ORM。开发者不需要写 SQL,只需要定义 Python 类。
- 定义 :继承
models.Model。 - 字段 :使用
fields.Char()等定义列。 - 映射:Odoo 启动时会自动在数据库创建对应的表。
模块化 (Addons)
虽然 addons 目录在根目录下,但 odoo/addons 里面也包含了一些基础模块(如 base)。
- 系统启动时,会加载
addons path下的所有模块。 - 通过
__manifest__.py读取模块元数据。
下一步
理解了这些基础设施后,我们将在下一章实际追踪一个业务请求:从浏览器点击保存,到数据库插入一条记录,中间到底发生了什么?