Xodoo第二十节

xmlrpc-服务端与客户端模块

XML-RPC 是一种远程过程调用方法,它使用通过 HTTP 传递的 XML 作为载体。 有了它,客户端可以在远程服务器上调用带参数的方法(服务器以 URI 命名)并获取结构化的数据。

xmlrpc.client-客户端

class xmlrpc.client.ServerProxy(uritransport=Noneencoding=Noneverbose=Falseallow_none=Falseuse_datetime=Falseuse_builtin_types=False*headers=()context=None)

ServerProxy实例是管理与远程 XML-RPC 服务器通信的对象。 要求的第一个参数为 URI (统一资源定位符),通常就是服务器的 URL。 可选的第二个参数为传输工厂实例;在默认情况下对于 https: URL 是一个内部 SafeTransport 实例,在其他情况下则是一个内部 HTTP Transport 实例。 可选的第三个参数为编码格式,默认为 UTF-8。 可选的第四个参数为调试旗标。

from xmlrpc import client

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

common = client.ServerProxy('%s/xmlrpc/2/common' % server_url) #连接服务端
user_id = common.authenticate(db_name, username, password, {}) #获得登录用户ID

if user_id:
    print("Success: User id is", user_id)
else:
    print("Failed: wrong credentials")

返回成功!

查找

models = client.ServerProxy('%s/xmlrpc/2/object' % server_url)
user_id = common.authenticate(db_name, username, password, {})

search_domain = [['name', 'ilike', 'Room']] #设置过滤条件
    rooms_ids = models.execute_kw(db_name, user_id, password,
        'hostel.room', 'search',
        [search_domain],
        {'limit': 5})
print('Rooms ids found:', rooms_ids)

rooms_data = models.execute_kw(db_name, user_id, password,
        'hostel.room', 'read',
        [rooms_ids, ['name', 'room_no']])
print("Rooms data:", rooms_data)

search_domain = [['name', 'ilike', 'room']]
    rooms_ids = models.execute_kw(db_name, user_id, password,
        'hostel.room', 'search_read',
        [search_domain, ['name', 'room_no']],
        {'limit': 5})
print('Rooms data:', rooms_ids)

models.execute_kw("数据库名称","用户ID","用户密码","模型","操作方法(查询,创建等)",args=[], kwargs={}))

args: 位置参数(可选)
kwargs: 关键字参数(可选)

{'limit':5} 表示返回5条数据

方法:

1、search:查询返回ID

2、read:查询指定记录的字段信息

3、search_read:查询并读取信息

创建和写入
    create_data = [
        {'name': 'Room 1', 'room_no': '101'},
        {'name': 'Room 3', 'room_no': '102'},
        {'name': 'Room 5', 'room_no': '103'},
        {'name': 'Room 7', 'room_no': '104'}
    ]
    rooms_ids = models.execute_kw(db_name, user_id, password,
        'hostel.room', 'create',
        [create_data])
    print("Rooms created:", rooms_ids)

    room_to_write = rooms_ids[1]  
    write_data = {'name': 'Room 2'}
    written = models.execute_kw(db_name, user_id, password,
        'hostel.room', 'write',
        [room_to_write, write_data])
    print("Rooms written", written)

方法:

4、create:创建一条信息

5、write: 对信息进行修改

可以看到create创建后返回的是ID,write更新后返回的是布尔类型True。

这里直接创建后修改,所有房间名已经被修改成"Room 2"了 

删除

方法:

6、unlink:根据ID删除对应信息

这里我们直接取上面创建的ID来删除对应的信息。

    rooms_to_delete = rooms_ids[2:]
    deleted = models.execute_kw(db_name, user_id, password,
        'hostel.room', 'unlink',
        [rooms_to_delete])
    print('Rooms unlinked:', deleted)

为了方便演示,我这里采用上面创建方法重新创建了记录进行删除

删除后的返回值也是布尔类型,从第二个开始删除,所以还保留着前面两条记录。

函数方法

7、[函数方法]:调用函数

class HostelRoom(models.Model):
    def make_available(self):
        self.change_state('available')
        return True

room_id = models.execute_kw(db_name, user_id, password,
        'hostel.room', 'create',
        [{
            'name': 'New Room',
            'room_no': '35',
            'state': 'draft'
        }])


models.execute_kw(db_name, user_id, password,
        'hostel.room', 'make_available',
        [[room_id]])

可以看到我们把draft通过函数改成了 available 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

DTCloud4

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

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

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

打赏作者

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

抵扣说明:

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

余额充值