odoo controllers 中type="Json" 或type="http"
服务端接收参考:
# 导包
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’.
odoo controllers 中type="Json" 或type="http"的更多相关文章
- Struts2 中 result type=”json” 的参数解释
转自:http://wangquanhpu.iteye.com/blog/1461750 1, ignoreHierarchy 参数:表示是否忽略等级,也就是继承关系,比如:TestAction 继承 ...
- 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 ...
- Jekins 插件Extended Choice Parameter显示Json Parameter Type遇到的问题
在jenkins中使用Extended Choice Parameter插件用来显示自定义的多选项,尝试通过groovy script来显示,正常,但查看它的例子,发现它例子中多选是通过类型 Json ...
- 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/ ...
- swift 中Value Type VS Class Type
ios 中Value Type 和 Class Type 有哪些异同点,这个问题是在微信的公共帐号中看到的,觉得挺有意思,这里梳理一下. 1.swift 中为什么要设置值类型? 值类型在参数传递.赋值 ...
- html5中如何去掉input type date默认
html5中如何去掉input type date默认样式 2.对日期时间控件的样式进行修改目前WebKit下有如下9个伪元素可以改变日期控件的UI:::-webkit-datetime-edit – ...
- python 中的object与type的关系
object 和 type的关系很像鸡和蛋的关系,先有object还是先有type没法说,obejct和type是共生的关系,必须同时出现的. 在看下去之前,也要请先明白,在Python里面,所有的东 ...
- jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)
1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @Paren ...
- 【转】html5中如何去掉input type date默认样式
html5中如何去掉input type date默认样式1.时间选择的种类:HTML代码: 选择日期:<input type="date" value="2017 ...
随机推荐
- java笔试题(二)
1.写出一维数组初始化的两种方式 int[] arr={1,2,3}; String[] str=new String[2]; str[1]="23"; 2.写出二维数组初始化的两 ...
- SpringBoot 自动配置原理,翻源码看一下
初始化一个Springboot项目,在主启动类会有这么一个注解:@SpringBootApplication,自动装配的秘密全在主启动类这个注解里面了 点进去一层会发现有三个子注解组成,分别是 @ ...
- Webflux(史上最全)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- vagrant+java+springcloud+redis+zookeeper镜像下载(&制作详解)
文章很长,建议收藏起来,慢慢读! 备注:持续更新中..... 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 + 涨薪必备 疯 ...
- 浏览Github必备的5款神器级别的Chrome插件
我们知道 Github 是程序员特有的宝藏,也可以称它为 GayHub, 大家浏览 Github 的时候,一定遇到过下面这些问题: 不克隆到本地的情况下阅读代码困难. 无法单独下载仓库中的某个文件/文 ...
- 小Z的袜子(hose) &&作业 (莫队)
莫队:一种非常优雅的暴力,时间复杂度一般情况下是n*根号n,还是很优秀的. 今天水了三道莫队题,对普通莫队有了些了解 1.莫队l和r为指针,维护当前区间的某些信息,一般可以是当前区间不同权值的个数,( ...
- xshell连接时报错:Could not connect to '192.168.2.125' (port 22): Connection failed.
解决思路: 1.首先用主机ping下虚拟机IP,看是否能ping通 2.如果ping不通就看虚拟机防火墙是否开启,service iptables status [root@mysql ~]# ser ...
- Centos7安装配置jenkins(Tomcat)
Centos7安装配置jenkins(Tomcat) 一.准备工作 1.1 安装JDK1.8 具体安装过程不在赘述. 1.2 下载jenkins的war包 jenkins官网下载地址:https:// ...
- UI自动化学习笔记- Selenium元素定位及元素操作
一.元素定位 1. 如何进行元素定位? 元素定位就是通过元素的信息或元素层级结构来定位元素的 2.定位工具 浏览器开发者工具 3.元素定位方式 Selenium提供了八种定位元素方式 id name ...
- 二维动态规划&&二分查找的动态规划&&最长递增子序列&&最长连续递增子序列
题目描述与背景介绍 背景题目: [674. 最长连续递增序列]https://leetcode-cn.com/problems/longest-continuous-increasing-subseq ...