這次換 JSON-RPC 來實作簡單的客戶端 App,並且別重新造論子了,用 OdooRPC 吧! 你知道嗎,Odoo 原生的網頁前端就是使用 JSON-RPC 來跟後端溝通的。
今天會完成一個嫁接原本我們在 Library 模組上的功能,並從外部的 Python 環境中執行。
這次我們就略過 JSON-RPC 的細節 (詳細可以參考這 Link),直接往平日開發時我們會怎麼做開始吧!
昨天我們試過了土法煉鋼的模式,這次我們要來使用客戶端的函式庫 OdooRPC
,OdooRPC
目前是由 Odoo Community Association (OCA) 維護的,可以直接從 PyPI
上直接下載。
(env15) ~$ pip3 install odoorpc
Collecting odoorpc
Obtaining dependency information for odoorpc from https://files.pythonhosted.org/packages/20/60/8c5ea2a63151d6c1215e127909eeee3c16e792bbae92ab596dd921d6669d/OdooRPC-0.10.1-py2.py3-none-any.whl.metadata
Downloading OdooRPC-0.10.1-py2.py3-none-any.whl.metadata (4.8 kB)
Downloading OdooRPC-0.10.1-py2.py3-none-any.whl (38 kB)
Installing collected packages: odoorpc
Successfully installed odoorpc-0.10.1
當然,你得先測試一下你安裝是否成功,像是直接使用 Python 直譯器。
(env15) ~# python3
Python 3.7.3 (default, Jun 29 2023, 18:03:57)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import odoorpc
>>> api = odoorpc.ODOO("localhost", port=8070)
>>> api.login("library", "YOUR_DB_USERNAME", "YOUR_DB_PASSWORD")
>>> uid = api.env.uid
>>> print(uid)
2
>>> model = "library.book"
>>> Model = api.env[model]
這樣看來目前執行都是成功的了!
記得另一個終點機要啟動 Odoo Server 歐。 --- 文西
可以參考 OCA/odooRPC GitHub
這邊是這次實作的 commit。
這實作旨在讓大家基本了解 odoorpc
如何使用,以及跟原本的 XML-RPC 實作起來的差別在哪,我相信你會感受到明顯的差別。
第一部分,我們實作了一個簡易的調用 Odoo 圖書館系統的 API,主要包含初始化、創造、移除及搜尋,很多部分直接寫死,讓程式碼盡量精簡,比較好理解。
第二部分是做簡單的測試,先建立一本書,並用那本書的書名搜尋,再來移除書籍,在搜尋一次,應該就要找不到那本書了。
class LibraryAPI():
_MODEL = "library.book"
def __init__(self, host, port, db, username, password):
self._api = odoorpc.ODOO(host, port=port)
self._api.login(db, username, password)
self._uid = self._api.env.uid
self._model = self._api.env[self._MODEL]
def search_read(self, title = None, domain = [], fields = ["id", "name"]):
domain = [("name", "ilike", title)] if title else []
return self._model.search_read(domain, fields)
def create(self, title):
return self._model.create({"name": title})
def unlink(self, id):
return self._model.unlink(id)
我們會跟 Odoo 伺服器建立連線,並且取出我們指定的 library.book
model,這邊我們寫死,並且對 library.book
model 銜接新增、搜尋、移除的功能。
可能要特別注意的是 domain
裡面的 "ilike"
,是指搜尋不分打小寫有包含的,詳細可以參考這篇。
實作在這 Link,用我近期很喜歡的書舉例,現任微軟 CEO 寫的,強調用同理心完成企業的世紀變革,如今的微軟,很多策略皆是由他確立的,一改以往大家對微軟的刻板印象。
以下為實作的結果,可以對照程式碼會較清楚!
Output
(env15) # python3 library_odoorpc.py
*** Create ***
New book with ID 3 for title 刷新未來:重新想像AI+HI智能革命下的商業與變革
*** Search ***
3 刷新未來:重新想像AI+HI智能革命下的商業與變革
*** Delete ***
Book with ID 3 was deleted.
*** Search ***