我嘗試過不同的方式,但他們沒有奏效。如何在Odoo JSON控制器中發送簡單的消息和狀態作爲響應?
首先,我試過這樣:
import openerp.http as http
from openerp.http import Response
class ResPartnerController(http.Controller):
@http.route('/odoo/create_partner', type='json', auth='none')
def index(self, **kwargs):
Response.status = '400'
return "Result message"
我得到正確的狀態,並在客戶端的消息。但是,如果我做的Odoo接口
的任何行動,我得到這個奇怪的警告是有辦法避免這種情況的消息?
我這個試圖左右逢源,以及:
data = {'result': 'RESULT message'}
json_data = json.dumps(data, encoding='utf-8')
headers = [('Content-Type', '{}; charset=utf-8'.format('application/json'))]
mimetype = 'application/json'
res = Response(
response=json_data,
status=status,
headers=headers,
mimetype=mimetype,
)
return res
msg = u'Response 200 badly built, falling back to a simple 200 OK response'
res = Response(msg, status=200)
return res
但我總是得到這個錯誤在客戶端回答:
TypeError: <Response 9 bytes [400 BAD REQUEST]> is not JSON serializable\n", "message": "<Response 9 bytes [400 BAD REQUEST]> is not JSON serializable"
那麼,有沒有一個乾淨的方式回答一個簡單的消息與響應的狀態?
給我發送響應的狀態,以及
如果我只是迴應的消息一切工作正常,但如何改變狀態,而不怪異的行爲是很重要的?
順便說一句,我用這個腳本做呼叫
# -*- coding: utf-8 -*-
import requests
import json
url = 'http://localhost:8069/odoo/create_partner'
headers = {'Content-Type': 'application/json'}
data_res_partner = {
'params': {
'name': 'Example',
'email': '[email protected]',
}
}
data_json = json.dumps(data_res_partner)
response = requests.post(url=url, data=data_json, headers=headers)
print(response.status_code)
print(response.content)
更新
最後@Phillip棧告訴我,XML-RPC要做到這一點,所以我寫了這個other question在爲了澄清我的疑惑。
什麼是你的控制器一樣的定義是什麼?它是'json'還是'http'控制器?它接受什麼樣的請求?我們可以猜出這些細節,但最好包含控制器的完整代碼,而不是'[...]' – danidee
從外部腳本的外觀來看,您正試圖創建一個休息界面來創建聯繫人。你應該真的使用jsonrpc或xmlrpc,因爲這個結構已經存在,可以完成你想要完成的任務。 –
感謝您的評論@phillipstack。那麼,我應該何時使用控制器?僅需要將網站顯示爲回覆? – ChesuCR