Openerp 响应状态200 odoo 9
控制台中的After call requests.post获取错误和状态代码200 如何从控制器获取数据 Controller.pyOpenerp 响应状态200 odoo 9,openerp,odoo-9,Openerp,Odoo 9,控制台中的After call requests.post获取错误和状态代码200 如何从控制器获取数据 Controller.py import json @http.route('/test_json', type="json", auth="public") def some_json(self): return json.dumps({"name": "Odoo", 'website': 'www.123.com'},{"name": "Odoo 2", 'website':
import json
@http.route('/test_json', type="json", auth="public")
def some_json(self):
return json.dumps({"name": "Odoo", 'website': 'www.123.com'},{"name": "Odoo 2", 'website': 'www.456.com'})
点击按钮呼叫
import requests,json
res = requests.post("http://localhost:8069/test_json",data=json.dumps({}),headers={"Content-Type":"application/json"})
body = res.text
print(body)
在控制台中获取:
{"jsonrpc": "2.0", "id": null, "error": {"message": "Odoo Server Error", "code": 200, "data": {"debug": "Traceback (most recent call last):\n File \"/home/pc/git/odoo/openerp/http.py\", line 648, in _handle_exception\n return super(JsonRequest, self)._handle_exception(exception)\n File \"/home/pc/git/odoo/openerp/http.py\", line 1631, in _dispatch_nodb\n func, arguments = self.nodb_routing_map.bind_to_environ(request.httprequest.environ).match()\n File \"/usr/lib/python2.7/dist-packages/werkzeug/routing.py\", line 1433, in match\n raise NotFound()\nNotFound: 404: Not Found\n", "exception_type": "internal_error", "message": "", "name": "werkzeug.exceptions.NotFound", "arguments": []}}}
您的odoo服务器正在响应一个错误,因为它不确定从哪个数据库响应。您可能有多个数据库 Odoo服务器能够同时托管多个数据库。当您向Odoo服务器发出请求时,它所做的第一件事就是确定该请求应该由哪个实例或数据库处理,因为每个数据库可能安装了不同的模块和不同的用户/数据,因此对每个数据库的相同请求很可能会以不同的方式处理,并产生不同的结果结果 有多种方法可以告诉服务器每个请求应该以哪个数据库为目标。其中一些是上下文相关的,我不知道是否有文档可以真正解释其中一个相关,而另一个不相关 给你
db\u filter=%d
(--db\u filter%d
在启动脚本中)在本例中,数据库将被称为test
res = requests.post('http://localhost:8069/test_json', headers={"Content-Type":"application/json"}, cookies={'session_id': session_id})
下面是一个获取会话id的示例请求
url = 'http://localhost:8069/web/session/authenticate'
data = {
'jsonrpc':'2.0',
'method':'call',
'params':{
'context':{},
'db':'db_name',
'login':'admin',
'password':'admin'
},
'id': null
}
res = requests.post(url, data=data, headers={"Content-Type":"application/json"})
print(res.text)
# YOU WILL HAVE TO PARSE THE RESULT YOURSELF I AM NOT SURE THE RESPONSE OBJECT WILL BE AS BELOW
session_id = res.text['results']['session_id']
现在在请求中使用会话id
res = requests.post('http://localhost:8069/test_json', headers={"Content-Type":"application/json"}, cookies={'session_id': session_id})
您的odoo服务器正在响应一个错误,因为它不确定从哪个数据库响应。您可能有多个数据库 Odoo服务器能够同时托管多个数据库。当您向Odoo服务器发出请求时,它所做的第一件事就是确定该请求应该由哪个实例或数据库处理,因为每个数据库可能安装了不同的模块和不同的用户/数据,因此对每个数据库的相同请求很可能会以不同的方式处理,并产生不同的结果结果 有多种方法可以告诉服务器每个请求应该以哪个数据库为目标。其中一些是上下文相关的,我不知道是否有文档可以真正解释其中一个相关,而另一个不相关 给你
db\u filter=%d
(--db\u filter%d
在启动脚本中)在本例中,数据库将被称为test
res = requests.post('http://localhost:8069/test_json', headers={"Content-Type":"application/json"}, cookies={'session_id': session_id})
下面是一个获取会话id的示例请求
url = 'http://localhost:8069/web/session/authenticate'
data = {
'jsonrpc':'2.0',
'method':'call',
'params':{
'context':{},
'db':'db_name',
'login':'admin',
'password':'admin'
},
'id': null
}
res = requests.post(url, data=data, headers={"Content-Type":"application/json"})
print(res.text)
# YOU WILL HAVE TO PARSE THE RESULT YOURSELF I AM NOT SURE THE RESPONSE OBJECT WILL BE AS BELOW
session_id = res.text['results']['session_id']
现在在请求中使用会话id
res = requests.post('http://localhost:8069/test_json', headers={"Content-Type":"application/json"}, cookies={'session_id': session_id})
+另外,还有一个小提示:您可以在日志中检查错误是否与数据库或缺少的数据库有关。每个日志行都绑定到一个db,因此如果在调用行中没有看到数据库名称,那么这就是问题所在。AFAIR当未选择数据库时,您确实会得到一个NotFound。另外,还有一个小提示:您可以在日志中检查错误是否与数据库或缺少的数据库有关。每个日志行都绑定到一个db,因此如果在调用行中没有看到数据库名称,那么这就是问题所在。如果未选择任何数据库,则会出现NotFound。