我正在尝试将一些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
任何人都可以帮助我吗?我做错了什么?
答案 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
,并在其中放置一个仅包含我当前数据库的正则表达式。