Xodoo第二十一节

jsonrpc

JsonRPC是一种基于JSON(JavaScript Object Notation)的轻量级远程过程调用协议。与其他RPC协议相比,JsonRPC使用简单的文本格式进行通信,易于阅读和编写,广泛应用于Web服务的分布式系统中。

import json
import random
import requests

server_url = 'http://localhost:9099'
db_name = 'testodoo'
username = 'admin'
password = '1'

json_endpoint = "%s/jsonrpc" % server_url
headers = {"Content-Type": "application/json"}

def get_json_payload(service, method, *args):
    kwargs = kwargs or {}
    return json.dumps({
        "jsonrpc": "2.0", # jsonrpc版本 一般为2.0
        "method": 'call', # 调用远程的方法名称
        "params": { # 传给远程的参数
            "service": service,
            "method": method,
            "args": args
        },
        "id": random.randint(0, 1000000000), # 请求唯一标识符 用于匹配请求和相应
    })

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: User id is", user_id)
else:
    print("Failed: wrong credentials")

 

查询

    # 搜索房间的 ID
    search_domain = [['name', 'ilike', 'Standard']]
    payload = get_json_payload("object", "execute_kw",
        db_name, user_id, password,
        'hostel.room', 'search', [search_domain], {'limit': 5})
    res = requests.post(json_endpoint, data=payload, headers=headers).json()
    print('Search Result:', res)  # ID 将位于结果键中

    # 读取房间 ID 的数据
    payload = get_json_payload("object", "execute_kw",
        db_name, user_id, password,
        'hostel.room', 'read', [res['result'], ['name', 'room_no']])
    res = requests.post(json_endpoint, data=payload, headers=headers).json()
    print('Rooms data:', res)

    search_domain = [['room_no', 'ilike', '1']]
    payload = get_json_payload("object", "execute_kw",
        db_name, user_id, password,
        'hostel.room', 'search_read', [search_domain, ['name', 'room_no']], {'limit': 5})
    res = requests.post(json_endpoint, data=payload, headers=headers).json()
    print('Rooms data:', res)

 

 

 创建

    payload = get_json_payload("object", "execute_kw",
        db_name, user_id, password,
        'hostel.room', 'check_access_rights', ['create'])
    res = requests.post(json_endpoint, data=payload, headers=headers).json()
    print("Has create access:", res['result'])

    create_data = [
        {'name': 'Room 1', 'room_no': '201'},
        {'name': 'Room 3', 'room_no': '202'},
        {'name': 'Room 5', 'room_no': '205'},
        {'name': 'Room 7', 'room_no': '207'}
    ]
    payload = get_json_payload("object", "execute_kw", db_name, user_id, password, 'hostel.room', 'create',
                               [create_data])
    res = requests.post(json_endpoint, data=payload, headers=headers).json()
    print("Rooms created:", res)
    rooms_ids = res['result']

更新

    room_to_write = rooms_ids[1]  
    write_data = {'name': 'Room 2'}
    payload = get_json_payload("object", "execute_kw", db_name, user_id, password, 'hostel.room', 'write',
                               [room_to_write, write_data])
    res = requests.post(json_endpoint, data=payload, headers=headers).json()
    print("Rooms written:", res)

删除

    room_to_unlink = rooms_ids[2:]  
    payload = get_json_payload("object", "execute_kw", db_name, user_id, password, 'hostel.room', 'unlink',
                               [room_to_unlink])
    res = requests.post(json_endpoint, data=payload, headers=headers).json()
    print("Rooms deleted:", res)

函数方法

    # 通过调用 make_available 方法更改房间状态
    payload = get_json_payload("object", "execute_kw",
        db_name, user_id, password,
        'hostel.room', 'make_available', [room_id])
    res = requests.post(json_endpoint, data=payload, headers=headers).json()

    # 方法调用后检查房间状态
    payload = get_json_payload("object", "execute_kw",
        db_name, user_id, password,
        'hostel.room', 'read', [room_id, ['name', 'state']])
    res = requests.post(json_endpoint, data=payload, headers=headers).json()
    print("Room state after the method call:", res['result'])

 

 

  • 8
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DTCloud4

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值