Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openerp 响应状态200 odoo 9_Openerp_Odoo 9 - Fatal编程技术网

Openerp 响应状态200 odoo 9

Openerp 响应状态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':

控制台中的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': '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_filter:包含在启动脚本或服务器配置文件中的正则表达式。例如,
    db\u filter=%d
    --db\u filter%d
    在启动脚本中)在本例中,数据库将被称为
    test
  • 查询字符串:,Odoo中的某些处理程序将使用此查询字符串来确定用于请求的数据库
  • 会话Id:客户端(主要是web浏览器)将存储包含会话Id的cookie,并在每次请求“会话Id=95bbc53e2ac4d02f50a8d6bf678602112a072807”时将其传递给服务器
  • 底线您得到的错误是,您的服务器说它不可能确定使用哪个数据库响应您的请求。如果需要将会话id与请求一起传递到服务器,则可以使用jsonrpc进行身份验证。存储会话id并将其传递到后续请求的头中

    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_filter:包含在启动脚本或服务器配置文件中的正则表达式。例如,
    db\u filter=%d
    --db\u filter%d
    在启动脚本中)在本例中,数据库将被称为
    test
  • 查询字符串:,Odoo中的某些处理程序将使用此查询字符串来确定用于请求的数据库
  • 会话Id:客户端(主要是web浏览器)将存储包含会话Id的cookie,并在每次请求“会话Id=95bbc53e2ac4d02f50a8d6bf678602112a072807”时将其传递给服务器
  • 底线您得到的错误是,您的服务器说它不可能确定使用哪个数据库响应您的请求。如果需要将会话id与请求一起传递到服务器,则可以使用jsonrpc进行身份验证。存储会话id并将其传递到后续请求的头中

    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。