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