我想从odoo controllery.py
获取JSON格式的数据示例:
import openerp.http as http
from openerp.http import request
class MyController(http.Controller):
@http.route('/test_html', type="http", auth="public")
def some_html(self):
return "<h1>Test</h1>"
#Work fine when open http://localhost:8069/test.html
@http.route('/test_json', type="json", website=True, auth="public")
def some_json(self):
return [{"name": "Odoo", 'website': 'www.123.com'}]
如何以json格式获取数据,我希望json中的数据在其他应用程序中使用ajax读取。
是否可以在打开网址http://localhost:8069/test_json ???
后查看json答案 0 :(得分:2)
重要的是要正确定义请求的contentType。
import json
@http.route('/test_json', type="json", auth="public")
def some_json(self):
return json.dumps({"name": "Odoo", 'website': 'www.123.com'})
在使用javascript的客户端中,您可以像这样请求json。
$.ajax({
type: "POST",
url: "/test_json",
async: false,
data: JSON.stringify({}),
contentType: "application/json",
complete: function (data) {
console.log(data);
}
});
或者在python中使用请求
import requests,json
res = requests.post("http://localhost:8069/test_json",data=json.dumps({}),headers={"Content-Type":"application/json"})
访问回复正文
body = res.text
至于你是否可以简单地打开浏览器并查看json。不,不是默认。
这是我得到的
Bad Request
<function some_json at 0x7f48386ceb90>, /test_json: Function declared as capable of handling request of type 'json' but called with a request of type 'http'
如果你真的希望能够在浏览器中查看它以及发出json请求,你可能会对控制器做一些非常喜欢的事情。我会发布第二个问题。
答案 1 :(得分:0)
你的控制器端点看起来不错,应该能正常运行,所以我想你的主要问题是如何测试它。
一旦声明端点类型为json
,Odoo将检查请求内容类型标头实际上是否为JSON,因此为了测试它,您的请求需要设置Content-Type: application/json
标头。使用常规浏览器有点困难,除非您在查询之前编辑请求标头或通过Ajax从JavaScript调用JSON端点。
或者,您可以使用curl
:
curl 'http://localhost:8069/test_json' -H 'Content-Type: application/json' --data "{}"
--data "{}"
这里表示一个空的JSON结构,它将作为请求参数传递给您的端点。
请注意,如果您使用的是多个Odoo数据库,则可能还需要传递包含session_id
Cookie的其他标头。