首页 > 其他分享 >odoo jsonrpc

odoo jsonrpc

时间:2024-02-17 11:44:56浏览次数:24  
标签:jsonrpc uid url pprint DB call odoo PASS

import json
import pprint
import random
import urllib.request

HOST = '192.168.2.21'
PORT = 8069
DB = 'wywr17' #数据库名称
USER = '' #登录用户名
PASS = '' #登录密码


def json_rpc(url, method, params):
    data = {
        "jsonrpc": "2.0",
        "method": method,
        "params": params,
        "id": random.randint(0, 1000000000),
    }
    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'))
    if reply.get("error"):
        raise Exception(reply["error"])
    return reply["result"]


def call(url, service, method, *args):
    return json_rpc(url, "call", {"service": service, "method": method, "args": args})


# 登录数据库,获取uid
url = "http://%s:%s/jsonrpc" % (HOST, PORT)
uid = call(url, "common", "login", DB, USER, PASS)


# # 创建记录 creat方法
# args = {
#     'name': "张三",
#     'create_uid': uid,
# }
# note_id = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'create', args)
# print(note_id)


# # 读取记录 read方法
# note_id = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'read', [1])
# print(note_id[0].get('email'))


# # # 更新记录  write方法
# vals = {
#     'email': '<EMAIL>',
# }
# # 老信息
# old_info = call(url, "object", "execute", DB, uid,
#                 PASS, 'res.partner', 'read', [1])
# print("old:", old_info[0].get('email'))
# # 更新
# func = call(url, "object", "execute", DB, uid,
#             PASS, 'res.partner', 'write', [1], vals)
# print(func)
# # 新信息
# new_info = call(url, "object", "execute", DB, uid,
#                 PASS, 'res.partner', 'read', [1])
# print("new:", new_info[0].get('email'))

# # # 删除记录 unlink方法
# func = call(url, "object", "execute", DB, uid,
#             PASS, 'res.partner', 'unlink', [111])
# print(func)


# # # #搜索 search方法
# # 单条件
# ids1 = call(url, "object", "execute", DB, uid,
#            PASS, 'res.partner', 'search', [['is_company', '=', True]])
# pprint.pprint(ids1)
# # 多条件
# ids2 = call(url, "object", "execute", DB, uid,
#            PASS, 'res.partner', 'search', [['is_company', '=', True], ['name', '=', '上官飞鸿']])
# pprint.pprint(ids2)


# # # 分页
# all_ids = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'search', [])
# pprint.pprint(all_ids)

# ten_ids = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'search', [], 0, 10)
# pprint.pprint(ten_ids)


# 读取 read方法
# ten_ids=call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'search', [], 0, 10)
# all_rec = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'read', ten_ids)
# # pprint.pprint(all_rec)
# for i in all_rec:
#     print(i.get('name'))

# # 读取指定列、字段
# one_rec = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'read', [1], ['id','name'])
# pprint.pprint(one_rec)
# ten_ids = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'search', [], 0, 10)
# ten_rec = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'read', ten_ids, ['id','name'])
# pprint.pprint(ten_rec)


# # #列出模型字段,检查可用信息
# # 所有字段
# all_fields = call(url, "object", "execute", DB, uid, PASS,
#                   'res.partner', 'fields_get', [])
# pprint.pprint(all_fields)
# # 指定类型字段(str)
# str_fields = call(url, "object", "execute", DB, uid, PASS,
#                   'res.partner', 'fields_get', [], ['string'])
# pprint.pprint(str_fields)

# # 查找并读取指定字段并分页 search_read方法
# ids = call(url, "object", "execute", DB, uid,
#            PASS, 'res.partner', 'search_read', [['is_company', '=', True]], ['id', 'name'], 0, 10)
# pprint.pprint(ids)

 

 

postman登录,返回用户ID

 

# # 读取记录 read方法
# note_id = call(url, "object", "execute", DB, uid,
#                PASS, 'res.partner', 'read', [1])

 其他的照搬吧

标签:jsonrpc,uid,url,pprint,DB,call,odoo,PASS
From: https://www.cnblogs.com/jackadam/p/18017828

相关文章

  • Odoo 15开发手册第八章 业务逻辑 - 业务流程的支持
    在前面的文章中,我们学习了如何使用模型层构建应用数据结构,然后使用ORMAPI和记录集查看和操作这些数据。本章中,我们把前面所学串到一起实现一些应用中常见的逻辑模式。我们会学习一起触发业务逻辑的方式,以及支撑这些方式的一些常见模式。我们还将学习一些重要的开发技巧,如打日志、......
  • Odoo版本升级
    起因是有客户希望从当前使用的版本16.3升级到17.0,后来从官方了解到目前官方支持数据库的在线升级,并且提供了免费的工具。因此,我们使用此工具成功帮客户从16.3版本升级到了17.0。本文即为升级过程的概述。先决条件想要把低版本的数据库升级到高版本需要满足两个条件:官方正版授......
  • Odoo中的literal_eval
    在Python中,通过导入ast模块,使用literal_eval将字符类型(str)的字符串,转化为字典类型(dict)。literal_eval转换方法,可以避免json和eval方法出现的问题,是字符转换为字典更好的方法。 Odoo中的literal_eval通过"from ast import literal_eval"引用使用:fromasti......
  • 优化 Odoo 性能:方法级别缓存的魔力
    浅谈Odoo的 @ormcache 装饰器。1.缓存的背景在实际开发中,某些计算可能会消耗大量时间和资源。例如,在计算字段的值时,可能需要执行复杂的逻辑或查询大量数据。为了避免在相同参数下重复执行这些耗时的计算,我们可以使用缓存机制。2.使用@ormcache装饰器在Odoo中,@ormcache ......
  • (原创)再论odoo中的计算字段
    计算字段严格意义上分为两种:存储型和非存储型。1)非存储型的计算字段,在其计算方法中,要确保该字段被赋值,也是保证缓存中有这个字段的值,否则会报错。13以前会报CacheMiss的错误,14以后会报ValueError的错误。当他依赖的字段修改时,通过modified方法,使它在缓存中无效,在后续访问这......
  • Odoo中在明细行中实现批量编辑
    实现效果图:在使用OdooERP系统时,我们经常需要对大量数据进行批量编辑。Odoo的tree视图提供了一个非常方便的界面来查看和编辑记录,但它默认不支持在one2many字段上的批量编辑。本文将介绍如何通过在form视图中添加一个特殊按钮,来实现在one2many字段的tree视图中进行批量编辑的功能。......
  • Ubuntu 20.04 安装Odoo17
    1、升级系统sudoapt-getupdate2、更新系统sudoapt-getupgrade3、查看系统Python3版本python3-V4、更新Python3.8到3.10sudoadd-apt-repositoryppa:deadsnakes/ppasudoapt-getupdate安装Python3.10sudoapt-getinstallpython3.10-y安装完成后,检查新版......
  • 自定义开发odoo14的统计在线用户人数 (续)
    上一篇是只统计在过去几分钟内有活动的用户是在线的。今天我们来处理当浏览器关闭后,才算是离线用户,否则算在线用户。 要实现当浏览器关闭后才算用户离线的功能,在Odoo中较为复杂,因为Odoo服务器端无法直接检测到客户端浏览器的关闭事件。不过,我们可以通过一种近似的方法来实......
  • 自定义开发odoo14的统计在线用户人数
    在Odoo14中统计在线人数通常涉及到定制开发或者使用特定的模块。自定义开发:如果没有现成的模块,您可能需要进行一些自定义开发。这通常涉及到扩展Odoo的用户模型,以跟踪用户的登录和登出活动。以下是一个基本的实现思路:扩展用户模型:在用户模型(通常是res.users)中添加字段来记......
  • Odoo接口说明
    通过使用PostMan调用Odoo-POST{"jsonrpc":"2.0", "params":{ "db":"factory", "login":"[email protected]", "password":"1"}}通过上面Josn格式调用系统......