Odoo 的 WEB 前端是完全通过接口和后端通讯的,几乎实现了前后端分离。以下主要通过 JSONRPC进行演示 。
一、路由及权限
在使用postman调用时,不可避免涉及到http请求及权限控制方面,这部分在 odoo.http 文件下定义以下函数,用于处理http 请求,权限由auth参数来控制
二、使用postman调用前,可以先进行权限验证获取session
先进行该方法调用
调用成功后将认证信息存入当前的session 和 request 对象中,Response Body 中为当前登录用户的各种信息,Response Heards 的 Set-Cookie 中包含session_id
然后就可以调用其他该账户权限范围内的api了
三、自定义controller
通过自定义的方式,自定义一个controller,调用
这样可以自定义一些接口及返回数据格式
四、odoo默认API,如何调用
- /web/dataset/seatch_read :查询model 数据列表
- /web/dataset/load :根据 id 查询 model 详情
- /web/dataset/call :调用model 的 method
- /web/dataset/call_kw :根据id 查询model 详情增强版,多了 ksargs 键值对参数
- /web/dataset/call_button :调用 odoo 视图 按钮绑定的model 方法
例1、model 搜索
接口地址:/web/dataset/search_read
接口作用:所有列表视图或者 kanban 视图都需要调用的接口,支持参数 offset 和 limit,还有 sort,就是可以用来分页获取数据表的中的记录。如 offset 10, limit 20,就是从第10条记录开始获取 20 条。当然它也返回总的满足搜索条件的记录数量,这样调用者才知道要分多少个页才能把数据都捞出来。
接口参数:JSONRPC 参数,一般参数形如
jsonrpc , method , id 这三个字段是一般情况下必须提供的,其中 id 无意义,一般值一直变大,表示为这个请求的唯一性,后台若有任何返回结果返回都会有这个相同的id,表示这个返回结果对应哪个请求。
params 中主要包含 model (表名称),domain 是搜索条件,fields 是要返回的数据字段名称列表,如果没有指定就返回所有字段,limit 是限制返回记录条数,offset 没有就是0,context 一般存有用户的session 数据
请求的结果:
length 是所有满足搜索条件的记录总数量,不是这次返回了多少个,本次返回多少个需要看 records 数组的长度,records 每一项就是一个记录
例2、数据记录的读、写、创建
接口名称:call kw (以 KEY WOED方式调用)
接口地址:/web/dataset/call_kw/{model}/{method}
接口作用:call kw 这个接口有一定的泛化性,可以支持很多操作,CRUD 都需要使用这个接口,自己写一个 model 中的 method 接口也是需要使用这个接口。其中 model 和 method 是补全这个调用 URL 必须提供的,如读一个表叫做 test_table 的记录就需要调用 web/dataset/call_kw/test_table/read。具体的记录 id 要在参数中提供。
基本请求参数的结构如下:
params 中 method 和 model 与 url 中的一样,分表是要调用的的方法名和model 名,其中method 可以为 read/create/write 等,read 和 weite 需要提供id ,create 不需要提供id
args 是个数组,第一个元素记录id ,第二个元素是字段名称列表
kwargs主要包含context ,含有用户session中的一点内容
创建
修改
删除
参考文档, Building a Module 和 ORM API 了解odoo 基本的参数等信息
本期的内容就到这里啦,我们下期见!
版权声明:本文由神州数码云基地团队整理撰写,若转载请注明出处。
公众号搜索神州数码云基地,后台回复Odoo,加入Odoo技术交流群!