Search 1.9 billion lines of Odoo code on GitHub

demo_controller_json

Author: My Company
License: no license
Branch: 14.0
Repository: twtrubiks/odoo-demo-addons-tutorial
Dependencies: web
Languages: Markdown (52, 53.6%), and Python (45, 46.4%)

<h1>odoo 14 教學 - 透過 controller 建立簡單 api</h1> <ul> <li><a href="https://youtu.be/q8ec5m4hyEo">Youtube Tutorial - 透過 controller 建立簡單 api</a></li> </ul> <p>除了之前教大家 <a href="https://github.com/twtrubiks/odoo-demo-addons-tutorial/tree/14.0/xml-rpc-odoo#%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8-python-xmlrpc-%E9%80%A3%E6%8E%A5-odoo-14">如何使用 python xmlrpc 連接 odoo-14</a> 之外,</p> <p>也可以透過 controller 建立簡單 api:smile:</p> <p>這篇文章會教大家如何透過 controller 建立簡單 api,</p> <p>你可能會問我說是不是 RESTful API, 答:不是:smirk:</p> <p>在 odoo 中如果要建立 RESTful API,</p> <p>要透過第三方 addons, 可參考 <a href="https://github.com/OCA/rest-framework">https://github.com/OCA/rest-framework</a></p> <p>這部份我以後來研究看看:smile:</p> <p>但我個人覺得如果真的要建立 RESTful API,</p> <p>可能使用我以前介紹的 <a href="https://github.com/twtrubiks/django-rest-framework-tutorial">Django-REST-framework 基本教學 - 從無到有 DRF-Beginners-Guide</a></p> <p>會比較理想:smile:</p> <h2>說明</h2> <p>練習這個範例時, 請留一個 db 就好 ( 因為如果同個網址底下有很多 db, 會抓不到:sob: )</p> <p>主要看 <a href="https://github.com/twtrubiks/odoo-demo-addons-tutorial/blob/14.0/demo_controller_json/controllers/controllers.py">controllers/controllers.py</a> 即可,</p> <p>先來看 <code>type=&#39;http&#39;</code> 的範例,</p> <p>```python ...... @http.route(&#39;/get<em>res</em>users/type1&#39;, type=&#39;http&#39;, auth=&#39;none&#39;) def get<em>res</em>users_http(self):</p> <pre><code> ...... return json.dumps(data) </code></pre> <p>...... ```</p> <p>當 odoo 執行起來後, 測試 api 指令如下,</p> <p><code>python import requests r = requests.get(&#39;http://0.0.0.0:8069/get_res_users/type1&#39;) r.text r.json() </code></p> <p><img src="https://i.imgur.com/yYo4Lyr.png" alt="alt tag"></p> <p>再來看 <code>type=&#39;json&#39;</code> 的範例,</p> <p><code>python ...... @http.route(&#39;/get_res_users/type2&#39;, type=&#39;json&#39;, auth=&#39;none&#39;) def get_res_users_json(self): ...... return json.dumps(data) ...... </code></p> <p>這邊要注意:exclamation: 如果使用 <code>type=&#39;json&#39;</code>,</p> <p>就只能使用 <code>jsonrpc</code> 呼叫, 不能使用前面教的方法呼叫,</p> <p>當 odoo 執行起來後, 測試 api 指令如下,</p> <p><code>cmd curl -X POST -H &quot;Content-Type: application/json&quot; -d &quot;{}&quot; http://0.0.0.0:8069/get_res_users/type2 </code></p> <p>參數說明</p> <p><code>-H</code> <code>--header</code></p> <p><code>-d</code> <code>--data</code> HTTP POST data</p> <p><code>-X</code> <code>--request</code> 使用指定的 request</p> <p><img src="https://i.imgur.com/wlxJr2i.png" alt="alt tag"></p>