服务端接收参考:

# 导包
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. 查找文件与cron计划任务

    查找文件 • 根据预设的条件递归查找对应的文件 find [目录] [条件1] [-a|-o] [条件2] ... -type  类型(f文件.d目录.l快捷方式) -name  "文档名称 ...

  2. ipconfig提示不是内部或外部命令

    昨天因为公司断网,重新连上之后ip地址变了,于是就想看看现在的ip是什么 输入ipconfig,回车 提示不是外部和内部命令,是因为系统在本路径下未找到ipconfig.exe系统,所以无法识别ipc ...

  3. Java算法面试题(史上最强、持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  4. PowerMockito的一些注意事项

    PowerMockito的一些注意事项 目录 PowerMockito的一些注意事项 1 注解@PowerMockIgnore({"javax.crypto.*"}) 2 Powe ...

  5. 循序渐进BootstrapVue,开发公司门户网站(4)--- 使用b-carousel-slide组件实现图片轮播以及vue-awesome-swiper实现图片滑动展示

    在BootstrapVue组件库里面,提供了很多对Bootstrap同等类似的组件封装,其中图片轮播可以采用b-carousel-slide组件实现,而有一些小的图片,如客户/合作伙伴Logo或者友情 ...

  6. Java中对象调用方法的顺序

    Java虚拟机会预先为加载到内存中的每个类维护一个方法表(Method Table),其中列出了所有类中所有方法的签名. 现在有2个类A和B,其中,B是A的子类,和一个B类型的对象x,当调用x.f(a ...

  7. 10年程序员的编程语言感受与Go的结缘

    因为小编最近在写两套教程,分别是Java语言基础教程和Go语言的基础教程,并且这 2 门语言,小编在实际的工作中也都有用过 而且 www.helloworld.net 社区的后台,就是用Go语言写的, ...

  8. CentOS-Docker安装RabbitMQ(单点)

    这里注意获取镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面. 获取镜像 $ docker pull rabbitmq:management ...

  9. ubuntu16.04上编译android的可执行文件并调用本地so库

    前言: 找了蛮多资料的,发现目前实现的编译方式大致就两种,一种是直接使用android源码中的编译工具链,另一种就是使用独立的交叉编译工具链,第二种我还在实现中,配置步骤挺多的 ,第一种实现方式挺方便 ...

  10. python log装饰器

    def log(func): #将原函数对象的指定属性复制给包装函数对象, 默认有 module.name.doc,或者通过参数选择 @functools.wraps(func) def wrappe ...