Odoo controller 路由表

启动 Odoo 时,各个controller 被引入,此时,会被注册到 Controller 类的属性 children_classes 里面 ;;

   

备注: odoo 15及之前版本, 注册到 controllers_per_module

   

客户端访问 Odoo 的时候,是由 Root App 这个 wsgi 应用来响应 http 请求的; 当 http 请求进来的时候, 先选择数据库, 然后通过 ir.http 提供的 _match() 方法来查询 URL 对应的 endpoint; 如果 查到 ,就将 该 http 请求 的处理器 设置为 相应的 endpoint 所包装的 function,并由其 进行处理; 如果没有 找到 URL,则返回 404

   

备注: ir_http._match() 其实是 方法 route_map() 的包装

 

route_map() 的核心逻辑是:

  1. 先找出 当前数据库已经安装的模块
  2. 调用 http._generate_routing_rules() 获取所已安装模块对应的 controller, 最后汇总 返回 url, endpoint 对

   

   

endpoint 就是 controller 里面被 route 装饰过的方法, 在 route_map() 方法里面,用 functools.partial() 包装一下,最终的形式 是这样的。

   

   

odoo.addons.web.contrllers.main.DataSet 这个 controller 的 search_read() 方法

   

备注: 模块都会转化为这个名称 odoo.addons.*

jeffery 2024年4月23日
标签
存档
Odoo视图继承