* 打开XML-RPC 连接
    >>> import xmlrpclib
    >>> srv, db = 'http://localhost:8069', 'v8dev'
    >>> user, pwd = 'admin', 'admin'
    >>> common = xmlrpclib.ServerProxy('%s/xmlrpc/2/common' % srv)
    >>> common.version()
    {'server_version_info': [8, 0, 0, 'final', 0], 'server_serie':
    '8.0', 'server_version': '8.0', 'protocol_version': 1}
   
    依赖 xmlrpclib 
   
    #验证
        >>> uid = common.authenticate(db, user, pwd, {})
        >>> print uid
   
    #取数据
        >>> api = xmlrpclib.ServerProxy('%s/xmlrpc/2/object' % srv)
       
       
        >>> api.execute_kw(db, uid, pwd, 'res.partner', 'search_count', [[]])
            得到记录集的总数
       
        >>> api.execute_kw(db, uid, pwd, 'res.partner', 'search',
            [[('country_id', '=', 'be'), ('parent_id', '!=', False)]])
           
            [43, 42]
            得到记录集的id序列
           
        >>> api.execute_kw(db, uid, pwd, 'res.partner', 'read', [[43]],
            {'fields': ['id', 'name', 'parent_id']})
           
            [{'parent_id': [7, 'Agrolait'], 'id': 43, 'name': 'Michel
            Fletcher'}]   
            得到记录
           
        >>> api.execute_kw(db, uid, pwd, 'res.partner', 'search_read',
            [[('country_id', '=', 'be'), ('parent_id', '!=', False)]],
            {'fields': ['id', 'name', 'parent_id']})
       
    #其它方法
    >>> api.execute_kw(db, uid, pwd, 'res.partner', 'create', [{'name':
        'Packt'}])
        75
    >>> api.execute_kw(db, uid, pwd, 'res.partner', 'write', [[75],
        {'name': 'Packt Pub'}])
        True
    >>> api.execute_kw(db, uid, pwd, 'res.partner', 'read', [[75], ['id',
        'name']])
        [{'id': 75, 'name': 'Packt Pub'}]
    >>> api.execute_kw(db, uid, pwd, 'res.partner', 'unlink', [[75]])
        True
       
* 做一个桌面应用 用到接口
   note_api.py
   ----------------
    import xmlrpclib

class NoteAPI():

def __init__(self, srv, db, user, pwd):
            common = xmlrpclib.ServerProxy( '%s/xmlrpc/2/common' % srv)
            self.api = xmlrpclib.ServerProxy('%s/xmlrpc/2/object' % srv)
            self.uid = common.authenticate(db, user, pwd, {})
            self.pwd = pwd
            self.db = db
            self.model = 'todo.task'
       
        def execute(self, method, arg_list, kwarg_dict=None):
            return self.api.execute_kw(
            self.db, self.uid, self.pwd, self.model,
            method, arg_list, kwarg_dict or {})   
       
        def get(self, ids=None):
            domain = [('id',' in', ids)] if ids else []
            fields = ['id', 'name']
            return self.execute('search_read', [domain, fields])
       
        def set(self, text, id=None):
            if id:
              self.execute('write', [[id], {'name': text}])
            else:
              vals = {'name': text, 'user_id': self.uid}
              id = self.execute('create', [vals])
            return id
       
        if __name__ == '__main__':
            srv, db = 'http://localhost:8069', 'v8dev'
            user, pwd = 'admin', 'admin'
            api = NoteAPI(srv, db, user, pwd)
            from pprint import pprint
            pprint(api.get())
   ----------------
   note_gui.py 
   ----------------
   from Tkinter import Text, Tk
import tkMessageBox
from note_api import NoteAPI

class NoteText(Text):
    def __init__(self, api, text='', id=None):
        self.master = Tk()
        self.id = id
        self.api = api
        Text.__init__(self, self.master, bg='#f9f3a9',
        wrap='word', undo=True)
        self.bind('<Control-n>', self.create)
        self.bind('<Control-s>', self.save)
        if id:
            self.master.title('#%d' % id)
        self.delete('1.0', 'end')
        self.insert('1.0', text)
        self.master.geometry('220x235')
        self.pack(fill='both', expand=1)
       
    def create(self, event=None):
        NoteText(self.api, '')
       
    def save(self, event=None):
        text = self.get('1.0', 'end')
        self.id = self.api.set(text, self.id)
        tkMessageBox.showinfo('Info', 'Note %d Saved.' % self.id)   
       
       
    if __name__ == '__main__':
        srv, db = 'http://localhost:8069', 'v8dev'
        user, pwd = 'admin', 'admin'
        api = NoteAPI(srv, db, user, pwd)
        for note in api.get():
            x = NoteText(api, note['name'], note['id'])
        x.master.mainloop()   
   ----------------
  
* ERPpeek
   首先要安装 erppeek
   $ pip install -U erppeek
  
   #API 用法:
    >>> import erppeek
    >>> api = erppeek.Client('http://localhost:8069', 'v8dev',
        'admin', 'admin')
    >>> api.common.version()
    >>> api.count('res.partner', [])
    >>> api.search('res.partner', [('country_id', '=', 'be'),
        ('parent_id', '!=', False)])
    >>> api.read('res.partner', [43], ['id', 'name', 'parent_id'])
   
   >>> m = api.model('res.partner')
   >>> m = api.ResPartner
  
   >>> m.count([('name', 'like', 'Packt%')]) 返回是数量
   >>> m.search([('name', 'like', 'Packt%')]) 返回是id
   >>> recs = m.browse([('name', 'like', 'Packt%')]) 返回是记录对象
  
   # CLI用法
     $ erppeek --help  可以看到详细的信息
    
    
* 到这里插件开发就讲完了

(07)odoo扩展API的更多相关文章

  1. Odoo : ORM API

    记录集 model的数据是通过数据集合的形式来使用的,定义在model里的函数执行时它们的self变量也是一个数据集合 class AModel(models.Model): _name = 'a.m ...

  2. win10桌面和手机的扩展API,判断是否有实体后退键API

    喜大普奔的win10 uap开发预览版终于出了,这次更新跟8.1的变化不是很大,但是将原本win8.1和wp8.1uap的分项目的形式,改为了整合成一个项目,经过一次编译打包成一个appx包,实现了无 ...

  3. Win(Phone)10开发第(1)弹,桌面和手机的扩展API,还我后退键

    喜大普奔的win10 uap开发预览版终于出了,这次更新跟8.1的变化不是很大,但是将原本win8.1和wp8.1uap的分项目的形式,改为了整合成一个项目,经过一次编译打包成一个appx包,实现了无 ...

  4. 【转】odoo 新API装饰器中one、model、multi的区别

    http://blog.csdn.net/qq_18863573/article/details/51114893 1.one装饰器详解 odoo新API中定义方式: date=fields.Date ...

  5. Java基础篇(02):特殊的String类,和相关扩展API

    本文源码:GitHub·点这里 || GitEE·点这里 一.String类简介 1.基础简介 字符串是一个特殊的数据类型,属于引用类型.String类在Java中使用关键字final修饰,所以这个类 ...

  6. 谷歌拼音输入法扩展API开发指南

    为了帮助开发者在谷歌拼音输入法的基本输入功能基础上,开发和定义更丰富的扩展输入功能,谷歌拼音输入法提供了以Lua脚本编程语言为基础的输入法扩展API.利用输入法扩展API,开发者可以编写自定义的输入功 ...

  7. Odoo的@api.装饰器

    转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9281437.html Odoo自带的api装饰器主要有:model,multi,one,constrains, ...

  8. odoo里API解读

    Odoo自带的api装饰器主要有:model,multi,one,constrains,depends,onchange,returns 七个装饰器. multimulti则指self是多个记录的合集 ...

  9. Python使用Odoo外部api

    Odoo服务器提供一个外部API,该API由其web客户端使用,也可以被支持XML-RPC或 JSON-RPC协议的编程语言(例如:Python.PHP.Ruby和Java)使用. 使用XML-RPC ...

随机推荐

  1. [转]Unity3d之MonoBehaviour的可重写函数整理

    最近在学习Unity3d的知识.虽然有很多资料都有记录了,可是我为了以后自己复习的时候方便就记录下来吧!下面的这些函数在Unity3d程序开发中具有很重要的作用. Update 当MonoBehavi ...

  2. Java中静态和非静态的区别

    在网上看到的,感觉还不错,自己笔记下来,以后忘了方便看: 非静态方法是相对于静态方法来说的.静态方法使用static关键字来标示,非静态方法没有此关键字. 他们之间最大的区别在于它们生命周期的不同,静 ...

  3. gastic 安装

    所有文件下载地址: ftp://ftp.broadinstitute.org/pub/GISTIC2.0/ cd /home/software/ tar zxf GISTIC_2_0_22.tar.g ...

  4. ABAP Enhancement:第一部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  5. 如何让div上下左右都居中

    在做登陆页面的话,需要login的div 上下左右都居中. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...

  6. 操作系统基础知识之————单线程(Thread)与多线程的区别

    单线程(Thread)与多线程的区别 (一)首先了解一下cpu: 随着主频(cpu内核工作时钟频率,表示在CPU内数字脉冲信号震荡的速度,等于外频(系统基本时间)乘倍频)的不断攀升,X86构架的硬件逐 ...

  7. Redis基础知识之—— hset 和hsetnx 的区别

    命令参数:HSET key field valueHSETNX key field value 作用区别:HSET 将哈希表 key 中的域 field 的值设为 value .如果 key 不存在, ...

  8. Oracle分析函数的项目实践实例

    SELECT * FROM SSE2_FLOW_EXPENSE T1 JOIN (SELECT SFEL.*, ROW_NUMBER() OVER(PARATITION BY SFEL.FE_EXPE ...

  9. Linux的ldconfig和ldd用法

    ldd 查看程序依赖库 ldd 作用:用来查看程式运行所需的共享库,常用来解决程式因缺少某个库文件而不能运行的一些问题. 示例:查看test程序运行所依赖的库: /opt/app/todeav1/te ...

  10. Spring源码分析心得-Bean的读取和注册

    Spring广泛的被使用足以证明它的价值,成功的东西自然值得我们深入学习.有很多人说的熟悉Spring也只是简单的使用经验,当我发现我也是其中一员时我很恐惧,所以开始扒源码,准备深入了解,话不多说,直 ...