服务端接收参考:

# 导包
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

最新文章

  1. iOS开发之手势识别汇总
  2. Nginx虚拟目录alias和root目录
  3. mysql主从复制(超简单)
  4. mysql集群之MYSQL CLUSTER
  5. PHP比较运算!=和!==
  6. javascript对象之 selectionStart selectionEnd
  7. BZOJ 2732 射箭
  8. Unix/Linux环境C编程入门教程(15) BT5开发环境搭建
  9. 有效的XML: DTD(文档类型定义)介绍(转)
  10. JS作用域理解
  11. 在eclipse上使用github,向github中提交项目
  12. java操作数据库的通用的类
  13. Docker镜像细节
  14. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(1)
  15. 微信小程序swiper 前后边距的使用
  16. Linux中程序开机自启
  17. Could not write to output file 'c:\Windows\Microsoft.NET ASP.NET Files\xx' -- 'Access is denied
  18. MySQL中JSON字段的使用技巧
  19. sed:轻量级流编辑器
  20. Java接口和抽象类理解(New)

热门文章

  1. CENTOS7 安装 SYNCTHING
  2. Redis源码解析之跳跃表(一)
  3. C# —— 点击按钮动态打开ComboBox
  4. 关于MySQL索引面试题的六连炮!招架的住吗?
  5. Project Reactor 响应式编程
  6. Java8-四个函数式接口(Consumer,Supplier,Predicate,Function)
  7. kube-controller-manager源码分析-PV controller分析
  8. 关于使用Draw.io画数据库E-R图的说明
  9. 『动善时』JMeter基础 — 52、使用JMeter测试Dubbo接口
  10. Custom Controller CollectionQT样式自定义 002 :NoteSlider 标签滑动条