Return 来自 odoo 9 的 json 数据
Return data as json from odoo 9
我想从 odoo 获取 JSON 格式的数据 controllery.py
示例:
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 读取。
打开后是否可以查看json url http://localhost:8069/test_json ???
重要的部分是正确定义请求的内容类型。
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 请求,您可以使用控制器做一些非常漂亮的事情。不过,我会 post 第二个问题。
您的控制器端点看起来不错,应该可以正常工作,所以我想您的主要问题是如何测试它。
一旦您声明端点类型为 json
,Odoo 将检查请求内容类型 header 实际上是否为 JSON,因此为了测试它,您的请求将需要设置 Content-Type: application/json
header。使用常规浏览器这有点困难,除非您在搜索前编辑请求 headers 或通过 Ajax.
从 JavaScript 调用您的 JSON 端点
或者,您可以使用 curl
:
等工具从命令行测试您的 API
curl 'http://localhost:8069/test_json' -H 'Content-Type: application/json' --data "{}"
--data "{}"
这里表示一个空的 JSON 结构,它将作为请求参数传递给您的端点。
请注意,如果您使用多个 Odoo 数据库,您可能还必须传递一个额外的 header 包含您的 session_id
cookie。 =16=]
我想从 odoo 获取 JSON 格式的数据 controllery.py
示例:
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 读取。
打开后是否可以查看json url http://localhost:8069/test_json ???
重要的部分是正确定义请求的内容类型。
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 请求,您可以使用控制器做一些非常漂亮的事情。不过,我会 post 第二个问题。
您的控制器端点看起来不错,应该可以正常工作,所以我想您的主要问题是如何测试它。
一旦您声明端点类型为 json
,Odoo 将检查请求内容类型 header 实际上是否为 JSON,因此为了测试它,您的请求将需要设置 Content-Type: application/json
header。使用常规浏览器这有点困难,除非您在搜索前编辑请求 headers 或通过 Ajax.
或者,您可以使用 curl
:
curl 'http://localhost:8069/test_json' -H 'Content-Type: application/json' --data "{}"
--data "{}"
这里表示一个空的 JSON 结构,它将作为请求参数传递给您的端点。
请注意,如果您使用多个 Odoo 数据库,您可能还必须传递一个额外的 header 包含您的 session_id
cookie。 =16=]