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



我正在尝试将一些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"}'

现在,我在浏览器上键入 URL (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时,它返回<响应[404]>,并且在日志中看不到任何消息(我期待控制器被调用。

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

OpenERP @http.route('demo_json', type="json") URL 不显示 JSON 数据

谁能帮我?我做错了什么?

我刚刚解决了这个问题。

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

之后,来自控制台的请求返回了 404 错误,因为它不知道将数据发送到哪个数据库。在本地主机:8069 中,我有多个数据库。所以我试图在那个港口只有一个。也就是说,现在它工作得很好!

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

我刚刚浏览了您的问题,我注意到您编写了从javascript调用的JSON路由。 如果要从浏览器 URL 命中调用它,则必须使用 type="http" 定义路由器,并在路由中auth="public"参数:

@http.route('/', type='http', auth="public", website=True)

最新更新