### XML-RPC Library
下面的例子是一個Python程序與圖書館Odoo服務器交互 `xmlrpclib`:
~~~ python
import xmlrpclib
root = 'http://%s:%d/xmlrpc/' % (HOST, PORT)
uid = xmlrpclib.ServerProxy(root + 'common').login(DB, USER, PASS)
print "Logged in as %s (uid: %d)" % (USER, uid)
# Create a new note
sock = xmlrpclib.ServerProxy(root + 'object')
args = {
'color' : 8,
'memo' : 'This is a note',
'create_uid': uid,
}
note_id = sock.execute(DB, uid, PASS, 'note.note', 'create', args)
~~~
練習
為客戶添加新的服務
寫一個能夠發送XML-RPC請求PC運行Odoo Python程序(你的,還是你的教練)。這個程序應該顯示所有的會話,以及相應的座位數量。它還應該為一個課程創建新的會話。
~~~ python
import functools
import xmlrpclib
HOST = 'localhost'
PORT = 8069
DB = 'openacademy'
USER = 'admin'
PASS = 'admin'
ROOT = 'http://%s:%d/xmlrpc/' % (HOST,PORT)
# 1\. 登錄
uid = xmlrpclib.ServerProxy(ROOT + 'common').login(DB,USER,PASS)
print "Logged in as %s (uid:%d)" % (USER,uid)
call = functools.partial(
xmlrpclib.ServerProxy(ROOT + 'object').execute,
DB, uid, PASS)
# 2\. 讀取session
sessions = call('openacademy.session','search_read', [], ['name','seats'])
for session in sessions:
print "Session %s (%s seats)" % (session['name'], session['seats'])
# 3.創建一個新 session
session_id = call('openacademy.session', 'create', {
'name' : 'My session',
'course_id' : 2,
})
~~~
而不是使用硬編碼的課程標識,代碼可以查找一個課程名稱:
~~~ python
# 3.為“功能性”課程創建一個新的會話
course_id = call('openacademy.course', 'search', [('name','ilike','Functional')])[0]
session_id = call('openacademy.session', 'create', {
'name' : 'My session',
'course_id' : course_id,
})
~~~