odoo controllers 中type="Json" 或type="http"

2021-04-13 01:27

阅读:512

 

但现在,我需要创建一个只接收JSON数据的控制器.所以,我正在通过Python控制台执行请求,这样:

import requests
import json

url = http://localhost:8069/odoo/test
headers = {Content-Type: application/json}
data = {
    name: ‘teddy,
    email: ‘teddy.doe@gmail.com,
}
data_json = json.dumps(data)
r = requests.post(url=url, data=data_json, headers=headers)
import openerp.http as http
from openerp.http import Response
import logging
_logger = logging.getLogger(__name__)


class WebFormController(http.Controller):

    @http.route(/odoo/test, type=json,
                auth=public, methods=[POST], website=True)
    def index(self, **args):
        _logger.info(CONNECTION SUCCESSFUL)
        _logger.info(args)
        name = args.get(name, False)
        email = args.get(email, False)
        _logger.info(name)
        _logger.info(email)
        if not name:
            Response.status = 400 Bad Request
        return {"response": "OK"}

问题是我在控制器中收到一个空的JSON.我可以在日志中读取CONNECTION SUCCESFUL,没有错误,但是当我显示args时,我得到{},显然由于这个原因,在写名字和电子邮件时为False.

如果我将数据作为Python字典或字符串传递,我会收到以下错误:

无效的JSON数据:’name = teddy& email=teddy.doe@gmail.com’或
无效的JSON数据:“{‘name’:’teddy’,’email’:’teddy.doe @ gmail.com’}”.

如果我修改type =’json’而我写了type =’http’,我会收到以下错误:

声明的函数能够处理类型为“http”的请求,但是使用类型为“json”的请求进行调用.

我已经读过如果使用参数json而不是数据发送请求可能会解决这个问题,这样:

 r = requests.post(url=url, json=data_json, headers=headers)

不幸的是,要发出请求的服务器有一个旧的操作系统无法更新python-requests包,所以我不能使用json参数,因为它在该服务器上安装的版本中不存在.

 

忘记将数据放在params关键字中:

 

使用以下正确的语法:

 

data = {“params“: dict(key=”value”)}

data = {
    "params": {
        "name":"prakashsharma",
        "email":"prakashsharmacs24@gmail.com",
        "phone":"+917859884833"
    }
}

在请求json格式的资源时,请不要忘记使用json.dumps(data)和’Content-Type’:’application / json’.

案例来源:http://www.voidcn.com/article/p-kionqzww-bvc.html


评论


亲,登录后才可以留言!