当前位置: 首页 > news >正文

Odoo | Webserivce | 5分钟学会【JSONRPC】接口开发

文章目录

  • Odoo - JsonRPC
    • 1. Odoo内方法结构(接收端)
    • 2. POST接口请求结构(发送端)
    • 3. 实例测试

Odoo - JsonRPC

1. Odoo内方法结构(接收端)

# -*- coding: utf-8 -*-
import odoo
import logging
import tracebackfrom odoo import api, fields, models, tools, SUPERUSER_ID, _
from odoo.exceptions import MissingError, UserError, ValidationError, AccessErrorclass YourModelName(models.Model):_name = 'your.model.name'@api.modeldef test_jsonrpc(self, args):try:# TODO SOMETHINGSreturn_json = {'code': "SUCCESS",'state': 'success','error_msg': '','datas': [{"code": "A01","name": "名称01",# ...},{"code": "A02","name": "名称02",# ...}# ...]}except Exception as e:return_json = {'code': "ERROR_001",'state': 'error','error_msg': 'Error: %s.' % str(traceback.format_exc()),'datas': []}return return_json

2. POST接口请求结构(发送端)

# -*- coding:utf-8 -*-
import json
import uuid
import pprint
import urllib.requestHOST = "xxx.xxx.xxx.xxx"
PORT = 8069
URL = "http://%s:%s/jsonrpc" % (HOST, PORT)
DB_NAME = "odoo12"
USERID = 2
USERNAME = "admin"
PASSWORD = "admin"
ModelName = "your.model.name"
FunctionName = "test_jsonrpc"UUID = str(uuid.uuid4())
data = {"id": UUID,       # 随机码"jsonrpc": "2.0",       # 固定值"method": "call",       # 固定值"params": {"service": "object",# 固定值"method": "execute",# 固定值"args": [DB_NAME,        # 数据库名称USERID,         # 接口用户IDPASSWORD,       # 接口用户密码ModelName,      # 模型FunctionName,   # 方法[]              # 参数结构体]}
}
req = urllib.request.Request(url=URL, data=json.dumps(data).encode(), headers={"Content-type": "application/json"})
reply = json.loads(urllib.request.urlopen(req).read().decode('UTF-8'))
pprint.pprint(reply)########################返回结果结构#######################
------------------------成功结果---------------------------
{'id': 'ef0d3de6-30b4-4104-9272-47d51d358b70','jsonrpc': '2.0','result': {'code': 'SUCCESS','state': 'success','error_msg': 'success','datas': [{'code': '10001','name': '名称01','lines': [{'a':1,'b':2},{'a':3,'b':4}# ...]},{'code': '10002','name': '名称02','lines': []}# ...],}
}
---------------------------------------------------------------------------------失败结果---------------------------
{'id': '055f70e0-1d2a-4cf5-983a-68db9e40ee80','jsonrpc': '2.0','result': {'state': 'error','code': 'ERROR_0001','error_msg': '错误: 详细错误信息.','datas': []}
}
---------------------------------------------------------
#########################################################

3. 实例测试

  1. Odoo内维护一个jsonrpc的方法:test_jsonrpc
    # -*- coding: utf-8 -*-
    import odoo
    import logging
    import tracebackfrom odoo import api, fields, models, tools, SUPERUSER_ID, _
    from odoo.exceptions import MissingError, UserError, ValidationError, AccessErrorclass IrActions(models.Model):_name = 'ir.actions.actions'_description = 'Actions'_table = 'ir_actions'_order = 'name'@api.modeldef test_jsonrpc(self, args):try:# TODO SOMETHINGSreturn_json = {'code': "SUCCESS",'state': 'success','error_msg': '','datas': [{"code": "A01","name": "名称01",# ...},{"code": "A02","name": "名称02",# ...}# ...]}except Exception as e:return_json = {'code': "ERROR",'state': 'error','error_msg': 'Error: %s.' % str(traceback.format_exc()),'datas': []}return return_json
    

  1. 在其他系统中进行调用测试
    # -*- coding:utf-8 -*-
    import json
    import uuid
    import pprint
    import urllib.requestHOST = "localhost"
    PORT = 8069
    URL = "http://%s:%s/jsonrpc" % (HOST, PORT)
    DB_NAME = "odoo12_db"
    USERID = 2
    USERNAME = "admin"
    PASSWORD = "admin"
    ModelName = "ir.actions.actions"
    FunctionName = "test_jsonrpc"
    UUID = str(uuid.uuid4())
    data = {"id": UUID,       # 随机码"jsonrpc": "2.0",       # 固定值"method": "call",       # 固定值"params": {"service": "object",# 固定值"method": "execute",# 固定值"args": [DB_NAME,        # 数据库名称USERID,         # 接口用户IDPASSWORD,       # 接口用户密码ModelName,      # 模型FunctionName,   # 方法[]              # 参数结构体]}
    }req = urllib.request.Request(url=URL, data=json.dumps(data).encode(), headers={"Content-type": "application/json"})
    reply = json.loads(urllib.request.urlopen(req).read().decode('UTF-8'))
    pprint.pprint(reply)

  1. 结果示例
    3.1 若程序正常执行无错误,则返回信息结构如下:
    在这里插入图片描述


    3.2 如果try语句中执行异常,返回错误信息结构如下:在这里插入图片描述


    3.3 如果身份验证或者请求参数有误,返回错误信息结构如下:
    在这里插入图片描述


    3.4 注意如果host和port不对的话,抛出的是Request的请求异常:
    在这里插入图片描述



🎉如果对你有所帮助,可以点赞、关注、收藏起来,不然下次就找不到了🎉


【点赞】⭐️⭐️⭐️⭐️⭐️
【关注】⭐️⭐️⭐️⭐️⭐️
【收藏】⭐️⭐️⭐️⭐️⭐️

Thanks for watching.
Kenny

http://www.lryc.cn/news/22729.html

相关文章:

  • 搜广推 NeuralCF - 改进协同过滤+矩阵分解的思想
  • dbever连接kerberos认证的hive
  • pom依赖产生的各种问题
  • RPC编程:RPC框架设计目标
  • RBAC 权限模型介绍
  • 西电面向对象程序设计核心考点汇总(期末真题)
  • 判断一个用字符串表达的数字是否可以被整除
  • 这是一款值得开发人员认真研究的软件,数据库优化,应用服务器安全优化...
  • 栈与队列小结
  • SpringBoot整合(五)HikariCP、Druid数据库连接池—多数据源配置
  • ShardingSphere水平、垂直分库、分表和公共表
  • 《分布式技术原理与算法解析》学习笔记Day24
  • 强化学习RL 02: Value-based Reinforcement Learning
  • 08_MySQL聚合函数
  • 「TCG 规范解读」词汇表
  • 第三阶段-03MyBatis 中使用XML映射文件详解
  • 从0开始学python -41
  • 如何将Google浏览器安装到D盘(内含教学视频)
  • 三战阿里测试岗,成功上岸,面试才是测试员涨薪真正的拦路虎...
  • Java代码弱点与修复之——ORM persistence error(对象关系映射持久错误)
  • 原始GAN-pytorch-生成MNIST数据集(原理)
  • Vue下载安装步骤的详细教程(亲测有效) 1
  • [Android Studio] Android Studio生成数字证书,为应用签名
  • 应用IC 卡继续教育网络管理系统前后影响因素比较
  • Clickhouse学习(一):MergeTree概述
  • Windows离线安装rust
  • Android与flutter混合开发
  • Linux和C语言的学习方法你真的知道吗?
  • 代码随想录day42
  • 【笔记】两台1200PLC进行S7 通信(1)