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

3

我想向Odoo控制器发送一些JSON数据,但当我发送请求时,总是得到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时,它返回<Response [404]>,并且我无法在日志中看到任何消息(我期望看到调用控制器。)类似的问题在这里有一个,但情况并不完全相同:OpenERP @http.route('demo_json', type="json") URL not displaying JSON Data。有谁能帮我吗?我错了什么?
2个回答

4

我刚刚查看了您的问题,发现您编写了一个被JavaScript调用的JSON路由。如果您想从浏览器URL中调用它,则需要在路由中定义type="http"auth="public"参数:

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

非常感谢您回答@techsavvy,不幸的是,我已经按照您告诉我的方式修改了控制器的装饰器,但我仍然得到相同的404响应。 - forvas
@forvas 我认为你没有使用 --db-filter = ur_db_name 启动你的 Odoo 服务。 - techsavvy
是的,我做到了,如果我访问http://localhost:8069/test/result,我可以看到*{"response": "OK"}*,但如果我从Python控制台执行请求,我仍然会得到404。 - forvas

4

我刚刚解决了这个问题。

首先,就像@techsavvy所说的那样,我必须修改装饰器,将type='json'改为type='http'

之后,从控制台发送的请求返回了404错误,因为它不知道要发送数据到哪个数据库。在localhost:8069上,我有多个数据库。所以我尝试只在该端口上保留一个数据库。现在,它运行得非常好!

为了管理这个问题,而不移除任何其他数据库,我只是修改了配置文件,更改了db_filter参数,并在其中放置了一个正则表达式,只包括我的当前数据库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接