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=]