odoo的RPC有两种:RPC API:1、xml-rpc

                                                     2、json-rpc

案例   xml-rpc

from xmlrpc import client

server_url='http://127.0.0.1:8069'
db_name = 'odoo12_202007'
username='admin'
password = 'admin'
common=client.ServerProxy('%s/xmlrpc/2/common'%server_url)
user_id=common.authenticate(db_name,username,password,{})
if user_id:
print ("success:User id is:",user_id)
else:
print ("Failed:worng credentials") user_id=common.authenticate(db_name,username,password,{}) odoo在/xmlrpc/2/common 端点上提供XML-RPC 该方法是一个公共方法,可以被公开调用 authenticate接受四个参数:数据库名,用户名,密码,用户代理环境【非强制参数,无可传空字典】 返回的是:odoo的版本
version_info = common.version()
案例2
from xmlrpc import client server_url='http://127.0.0.1:8069'
db_name = 'odoo12_202007'
username='admin'
password = 'admin'
common=client.ServerProxy('%s/xmlrpc/2/common'%server_url)
models=client.ServerProxy('%s/xmlrpc/2/object'%server_url)
user_id=common.authenticate(db_name,username,password,{})
if user_id:
search_domain = ['|',['name','ilike','odoo'],['name','ilike','sql']]
book_ids = models.execute_kw(db_name,user_id,password,
'library.book','search',
[search_domain],
{'limit':5})
books_data = models.execute_kw(db_name,user_id,password,
'library.book','read',
['books_ids',['name','date_release']])
else:
print ("Failed:worng credentials")
xml-rpc /创建/更新/删除记录

from xmlrpc import client

server_url='http://127.0.0.1:8069'
db_name = 'odoo12_202007'
username='admin'
password = 'admin'
common=client.ServerProxy('%s/xmlrpc/2/common'%server_url)
models=client.ServerProxy('%s/xmlrpc/2/object'%server_url)
user_id=common.authenticate(db_name,username,password,{})
if user_id:
create_data=[{'name':'test11','release_date':'2020-07-27'},
{'name':'test11','release_date':'2020-07-27'})
#创建新的记录
book_ids = models.execute_kw(db_name,user_id,password,
- 'library.book','create',
[create_data]
)
#修改现有的记录
book_to_write=book_ids[1]
books_data = models.execute_kw(db_name,user_id,password,
'library.book','write',
['book_to_write','write_data'])
#删除现有记录
book_to_delete=book_ids[2]
books_data = models.execute_kw(db_name,user_id,password,
'library.book','unlink',
['book_to_delete'])
else:
print ("Failed:worng credentials")

 案例json-rpc

import json
import random
import requests server_url='http://127.0.0.1:8069'
db_name = 'odoo12_202007'
username='admin'
password = 'admin' json_endpoint='%s/jsonrpc'%server_url
headers = {"Content-Type":"application/json"} def get_json_payload(service,method,*args):
return json.dumps({
"jsonrpc":"2.0",
"method":"call",
"params":{"service":service,
"method":method,
"args":args
},
"id":random.randint(0,100000) })
payload=get_json_payload("common","login",db_name,username,password)
response=requests.post(json_endpoint,data=payload,headers=headers)
user_id=response.json()['result']
if user_id:
print ("success")
else:
print ("failed")
import json
import random
import requests server_url='http://127.0.0.1:8069'
db_name = 'odoo12_202007'
username='admin'
password = 'admin' json_endpoint='%s/jsonrpc'%server_url
headers = {"Content-Type":"application/json"} def get_json_payload(service,method,*args):
。。。。。。。。
#see full function definition in last section
payload=get_json_payload("common","version")
response=requests.post(json_endpoint,data=payload,headers=headers)
print(response.json())
import json
import random
import requests server_url='http://127.0.0.1:8069'
db_name = 'odoo12_202007'
username='admin'
password = 'admin' json_endpoint='%s/jsonrpc'%server_url
headers = {"Content-Type":"application/json"} def get_json_payload(service,method,*args)
#see full function definition in last section
payload=get_json_payload("common","version")
response=requests.post(json_endpoint,data=payload,headers=headers)
user_id=response.json()['result'] 常用方法:read、search、create
if user_id:
#查询数据 ids will be in result keys!
search_domain = ['|',['name','ilike','odoo'],['name','ilike','sql']]
book_ids =get_json_payload("object","execute_kw",db_name,user_id,password,
'library.book','search',
[search_domain],
{'limit':5})
res=requests.post(json_endpoint,data=payload,headers=headers).json() #read数据 ids will be in result keys!
book_ids =get_json_payload("object","execute_kw",db_name,user_id,password,
'library.book','read',
[res['result'],['name','date_release']])
res=requests.post(json_endpoint,data=payload,headers=headers).json()
json-rpc /创建/更新/删除记录

if user_id:
create_data=[{'name':'test11','release_date':'2020-07-27'},
{'name':'test11','release_date':'2020-07-27'}]
#创建新的记录
payload=get_json_payload("object","execute_kw",db_name,user_id,password,
- 'library.book','create',
[create_data])
res=requests.post(json_endpoint,data=payload,headers=headers).json() #修改现有的记录
book_to_write=book_ids[1]
write_data={'name':'book2'}
payload=get_json_payload("object","execute_kw",db_name,user_id,password,
'library.book','write',
['book_to_write','write_data'])
#删除现有记录
book_to_delete=book_ids[2:]
payload=get_json_payload("object","execute_kw",db_name,user_id,password,
'library.book','unlink',
['book_to_delete'])
res=requests.post(json_endpoint,data=payload,headers=headers).json()

ODOORPC

import odoorpc

db_name = 'odoo12_202007'
username='admin'
password = 'admin' odoo=odoorpc.ODOO('localhost',port=8069)
odoo.login(db_name,username,password) #login user=odoo.env.user
bookModel=odoo.env['library.book']
search_domain = ['|',['name','ilike','odoo'],['name','ilike','sql']] #查询
book_ids = bookModel.search(search_domain,limit=5)
for book in bookModel.browse(book_ids)
print (book.name,book.date_release) #创建
book_id = bookModel.create({'name':'test11','release_date':'2020-07-27'})
book=bookModel.browse(book_id)
book.make_available() book=bookModel.browse(book_id)

odoo12里面的RPC【远程过程调用】的更多相关文章

  1. day07 hadoop里面的RPC框架使用

    PS: RPC远程调用 Webservice啥的都是远程调用.下面简单介绍其使用过程 Hadoop已经实现了RPC框架,不用我们自己写,不过需要我们注意几点:1.发布服务端和客户端必须包名相同 1.服 ...

  2. Activity往另外一个Activity传值,Fragment获取另外一个Activity里面的值。

    在oneActivity中实现跳转到MainActivity //intent 用来跳转另外一个MainActivity,bundle传值到MainActivity         Intent Ma ...

  3. Java基本概念(2)J2EE里面的2是什么意思

    J2EE里面的2是什么意思 J2SE,J2SE,J2ME中2的含义要追溯要1998年.1998年Java 1.2版本发布,1999年发布Java 1.2的标准版,企业版,微型版三个版本,为了区分这三个 ...

  4. 在wex5平台grid里面的gridselect下拉不能显示汉字问题

    当grid里面有gridSelect组件的时候,gridSelect里面的bind-ref是对应的数据库存入字段(int类型),bind-labelRef是对应的计算字段(视图里面的),而option ...

  5. dede文章调用时过滤调 body里面的style属性和值

    dede 发布文章的时候会在里面的标签中添加一些style 属性,现在改网站想去掉这些属性和里面的值,因为文章太多所以就用下面的方法 \include\arc.listview.class.php 在 ...

  6. 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载

    要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...

  7. JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)

    IO流根据处理对象的不同分为节点流和处理流. 直接对文件进行处理的流为节点流: 对流进行包装从而实现对文件的优化处理的流为处理流. 节点流类型: 可以看出,节点流主要分这几大类: 文件流 文件流构造方 ...

  8. 头文件里面的ifndef /define/endif的作用

    c,c++里面,头文件里面的ifndef /define/endif的作用 今天和宿舍同学讨论一个小程序,发现有点地方不大懂······ 是关于头文件里面的一些地方: 例如:要编写头文件test.h ...

  9. 尝试一下sql server2016里面的json功能

    前2天下载了一个2016的rc版本来玩一下,首先感觉是~开发者版本免费啦!!撒花!!!另外一个东西,sql server 2016能支持json 的解析和应用啦,虽然我不知道它的性能如何,先来一发测试 ...

随机推荐

  1. 保存数据到csv文件报错:Permission denied: './train_data.csv'

    如果你此前已经输出,创建了文件,很有可能是你打开了此文件,导致写入不进去报错,关掉文件重新运行程序即可!

  2. P1024 [NOIP2001 提高组] 一元三次方程求解

    题目描述 有形如:a x^3 + b x^2 + c x + d = 0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在 -100至 ...

  3. 11:(1055, "'bbs02.app01_category.name' isn't in GROUP BY")

    后台报错:[err] 1055 --  'xxx' isn't in GROUP BY 解决方案: 初步判断是数据库(版本?配置?)的问题 进入mysql 的my.ini配置文件 ctrl+f 搜索找 ...

  4. 点分治&cdq分治 总结

    游荡的孤高灵魂不需要羁绊之处. 洛谷题单 点分治 前置芝士 树的重心 树分治 例题略解 P3806 [模板]点分治1 板子题,先暴力找到整棵树的重心,然后先求出重心到各点的距离,进而算出他所在树的各个 ...

  5. Linux查看与设定别名

    1.alias :查看系统中所有的命令别名 2.设定别名 alias 别名='原命令' 3.删除别名 unalias 别名 4.使别名永久生效    vi  ~/.bashrc  写入这个文件中即可永 ...

  6. Mysql优化(出自官方文档) - 第六篇

    Mysql优化(出自官方文档) - 第六篇 目录 Mysql优化(出自官方文档) - 第六篇 Optimizing Subqueries, Derived Tables, View Reference ...

  7. 在vs中调试关闭之后不关闭页面

    在vs中调试api时会自动打开一个新的浏览器窗口,在关闭这个浏览器窗口时,会关闭调试.关闭调试时也会关闭浏览器窗口. 设置成调试时在已有的浏览器中打开调试页面,关闭调试也不会关掉浏览器窗口,反之亦然 ...

  8. MySQL 到 ES 数据实时同步技术架构

    MySQL 到 ES 数据实时同步技术架构 我们已经讨论了数据去规范化的几种实现方式.MySQL 到 ES 数据同步本质上是数据去规范化多种实现方式中的一种,即通过"数据迁移同步" ...

  9. Vue(12)组件的组织结构和组件注册

    组件的组织 通常一个应用会以一棵嵌套的组件树的形式来组织: 例如,你可能会有页头.侧边栏.内容区等组件,每个组件又包含了其它的像导航链接.博文之类的组件. 为了能在模板中使用,这些组件必须先注册以便 ...

  10. USB上位机通信:CyAPI

    至今的工作中,有USB接口通信的需求,记录一下. 建立一个USB设备对象 CCyUSBDevice *USBDevice = new CCyUSBDev(Handle): 打开USB设备 一个USB设 ...