如何在Odoo控制器中获取JSON数据?

时间:2016-03-10 10:30:58

标签: json python-2.7 controller odoo-8 odoo

我正在尝试将一些JSON数据发送到Odoo控制器,但是当我发送请求时,我总是得到404作为响应。

这是我的控制器的代码:

import openerp.http as http
import logging
_logger = logging.getLogger(__name__)

class Controller(http.Controller):

    @http.route('/test/result', type='json', auth='public')
    def index(self, **args):
        _logger.info('The controller is called.')
        return '{"response": "OK"}'

现在,我在浏览器上输入网址( http://localhost:8069/test/result )以检查它是否可用,我得到function index at 0x7f04a28>, /test/result: Function declared as capable of handling request of type 'json' but called with a request of type 'http'。这样我知道控制器正在侦听该URL并期望JSON数据。

所以我打开一个Python控制台并输入:

import json
import requests
data = {'test': 'Hello'}
data_json = json.dumps(data)
r = requests.get('http://localhost:8069/test/result', data=data_json)

当我在控制台中打印 r 时,它会返回&lt; Response [404]&gt; ,我在日志中看不到任何消息(我当时正在等待< em>控制器被调用。)。

这里有一个类似的问题,但情况并非完全相同:

OpenERP @http.route('demo_json', type="json") URL not displaying JSON Data

任何人都可以帮助我吗?我做错了什么?

2 个答案:

答案 0 :(得分:3)

我刚刚解决了你的问题,我注意到你写了json路由,这是javscript的调用。如果你想从浏览器网址命中它,那么你必须定义路由器类型=&#34; http&#34;和auth =&#34;公共&#34;路线中的参数

@ http.route(&#39; /&#39;,type =&#39; http&#39;,auth =&#34; public&#34;,website = True)

答案 1 :(得分:3)

我刚刚解决了这个问题。

首先,正如@techsavvy所说,我必须修改装饰器,写type='http'而不是type='json'

之后,来自控制台的请求返回404错误,因为它不知道它将数据发送到哪个数据库。在localhost:8069我有多个数据库。所以我试着在那个港口只有一个。就是这样,现在效果很好!

要在不删除任何其他数据库的情况下进行管理,我刚刚修改了配置文件以更改参数db_filter,并在其中放置一个仅包含我当前数据库的正则表达式。