服务端接收参考:

# 导包
from odoo import http
class HttpRequest(http.Controller):
@http.route('/url', type='json', auth='public', website=True)
def server_method(self, *args, **kwargs):
# *args, **kwargs接收参数
pass
# route中的参数可以参考odoo/http.py文件里def route(route=None, **kw)方法
# type在这里选择json

提供一个操作model(创建、修改)报权限问题的解决方法:

# 需要导入odoo
import odoo
# http.request.env['model'].create() 前加入下面这句话,会用超级管理员执行操作。若担心问题的话,可以使用登录的方法,这里暂不做演示
http.request.uid = odoo.SUPERUSER_ID
  • 客户端发送参考

  • import requests, json
    data = {"params":param}
    # 这个param代表需要传入的参数,params这个key非常重要,只有带了这个key,服务端才能接受到参数
    # 可以参考odoo/http.py文件里 class JsonRequest(WebRequest) 类,明确说明了
    requests.post(url='http://localhost:8069/url', data=json.dumps(data))
    # 说明一下,resquest中post这个api会根据data的数据类型自动转换请求头里Content-Type对应的参数

或者通过工具postman测试:

最后值得注意的地方

    • 服务端
      type='json'
    • 客户端
      data中一定要加入params
      数据需要转成Json

案例1

如何使用type =’json’在Odoo控制器中获取JSON数据?

但现在,我需要创建一个只接收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

odoo controllers 中type="Json" 或type="http"的更多相关文章

  1. Struts2 中 result type=”json” 的参数解释

    转自:http://wangquanhpu.iteye.com/blog/1461750 1, ignoreHierarchy 参数:表示是否忽略等级,也就是继承关系,比如:TestAction 继承 ...

  2. Caused by: The Result type [json] which is defined in the Result annotation on the class

    1.错误描述 严重: Dispatcher initialization failed Unable to load configuration. - [unknown location] at co ...

  3. Jekins 插件Extended Choice Parameter显示Json Parameter Type遇到的问题

    在jenkins中使用Extended Choice Parameter插件用来显示自定义的多选项,尝试通过groovy script来显示,正常,但查看它的例子,发现它例子中多选是通过类型 Json ...

  4. There is no result type defined for type 'json' mapped with name 'success'. Did you mean 'json'?

    错误信息: 严重: Exception starting filter struts2 Unable to load configuration. - action - file:/C:/Users/ ...

  5. swift 中Value Type VS Class Type

    ios 中Value Type 和 Class Type 有哪些异同点,这个问题是在微信的公共帐号中看到的,觉得挺有意思,这里梳理一下. 1.swift 中为什么要设置值类型? 值类型在参数传递.赋值 ...

  6. html5中如何去掉input type date默认

    html5中如何去掉input type date默认样式 2.对日期时间控件的样式进行修改目前WebKit下有如下9个伪元素可以改变日期控件的UI:::-webkit-datetime-edit – ...

  7. python 中的object与type的关系

    object 和 type的关系很像鸡和蛋的关系,先有object还是先有type没法说,obejct和type是共生的关系,必须同时出现的. 在看下去之前,也要请先明白,在Python里面,所有的东 ...

  8. jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)

    1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @Paren ...

  9. 【转】html5中如何去掉input type date默认样式

    html5中如何去掉input type date默认样式1.时间选择的种类:HTML代码: 选择日期:<input type="date" value="2017 ...

随机推荐

  1. 【NX二次开发】UF_CSYS_map_point()函数,绝对坐标,工作坐标,部件之间坐标转换。

    UF_CSYS_map_point用来变换点的坐标,比较简单且实用.例如工作坐标系与绝对坐标系转换,一个部件的坐标与另一个部件坐标系之间的转换.下面的例子是在三个坐标下创建三个点相对坐标为{10,50 ...

  2. Linux系统命令login的翻译

    LOGIN(1)                                用户命令                               LOGIN(1)名称       login - ...

  3. 排查bug:竟然是同事把Redis用成这鬼样子,坑了我

    首先说下问题现象:内网sandbox环境API持续1周出现应用卡死,所有api无响应现象 刚开始当测试抱怨环境响应慢的时候 ,我们重启一下应用,应用恢复正常,于是没做处理.但是后来问题出现频率越来越频 ...

  4. Android Gradle插件

    目录 什么是Gradle 编写方法 buildSrc 基础概念 Extension 自定义Task Plugin Transformer Gradle用处 好文章 常见问题 Gradle插件练习地址: ...

  5. Java语言实现二维码的生成

    众所周知,现在生活中二维码已经是无处不见.走在街道上,随处可见广告标语旁有二维码,手机上QQ,微信加个好友都能通过二维码的方式,我不知道是什么时候兴起的二维码浪潮,但是我知道,这在我小时候可是见不到的 ...

  6. Go语言十六进制转十进制

    Go语言十六进制转十进制 代码Demo import ( "fmt" "strconv" "testing" ) func Test_1(t ...

  7. Golang的一致性哈希实现

    Golang的一致性哈希实现 一致性哈希的具体介绍,可以参考:http://www.cnblogs.com/haippy/archive/2011/12/10/2282943.html   1 imp ...

  8. json串向后台传递数值自动四舍五入的问题

    业务需求:传递前台输入的数据,数量要求是小数点(多条数据) 后台服务是使用asp.net写的. 问题:反序列化JSON时总是自动四舍五入. 原因:JSON反序列化的时候数据类型是以第一条数据的类型为准 ...

  9. MySQL忘记密码怎么办-MySQL修改密码(亲测可用)

    前言: 最近要用到本地的MySQL,结果把密码忘记了. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using pas ...

  10. leetcode 面试题 17.22. 单词转换(DFS+回溯)

    题目描述 思路分析 这题回溯,先想出它的空间解是什么,这里空间解,其实就是给的原字符串到结束字符串中间的变形过程,那么就可以容易的画出一个解空间树,用深度搜索进行搜索, 剪枝后,进入下一个维度,再进行 ...