如果第一个 JSON 参数不是“params”,如何从 Odoo 中的 Webhook 访问数据?

Posted

技术标签:

【中文标题】如果第一个 JSON 参数不是“params”,如何从 Odoo 中的 Webhook 访问数据?【英文标题】:How to Access Data from Webhook in Odoo if first JSON parameter is not "params"? 【发布时间】:2019-12-26 19:56:43 【问题描述】:

我正在尝试将来自第三方软件的 webhook 接收到 Odoo。我可以收到请求,但数据是空白的。

这是来自 webhook 的默认 JSON:

    
    "event": "PARTICLE_EVENT_NAME",
    "data": "PARTICLE_EVENT_VALUE",
    "coreid": "PARTICLE_DEVICE_ID",
    "published_at": "PARTICLE_PUBLISHED_AT"
    

但是,使用下面的 Odoo 代码,如果我使用 _logger “打印(kw)”,则它是一个空白字典。

from odoo import http
import json
import datetime
import logging

_logger = logging.getLogger(__name__)

class EquipmentTrackerApi(http.Controller):

    @http.route('/api/v1/tracker_data', auth='public', csrf=False, type='json', methods=['POST'])
    def _create_tracker_data(self, **kw):
        _request = kw
        _logger.info(kw)

在我的测试中,如果我将 JSON 更改为以下内容,那么我可以读取数据并完成我的操作。但是问题是我实际上无法在生产中改变它。那么如果我无法进行以下更改,我该如何访问 JSON 数据呢?



  "params": 
    "event": "PARTICLE_EVENT_NAME",
    "data": "PARTICLE_EVENT_VALUE",
    "coreid": "PARTICLE_DEVICE_ID",
    "published_at": "PARTICLE_PUBLISHED_AT"
  



我听说这是 Odoo 中的一个问题,以及它如何处理请求,但看不到任何解决方案。任何想法如何在 Odoo 中解决这个问题?我在 v12 和 v13 中遇到了同样的问题。

【问题讨论】:

【参考方案1】:

你可以试试:

from odoo import http

import json, logging, request


_logger = logging.getLogger(__name__)


class EquipmentTrackerApi(http.Controller):

@http.route('/api/v1/tracker_data', auth='public', csrf=False, type='json', methods=['POST'])
    def _create_tracker_data(self, **kw):
        # data = json.loads(request.httprequest.args)
        data = json.loads(request.httprequest.data)            
        _request = data
        _logger.info(data)

【讨论】:

以上是关于如果第一个 JSON 参数不是“params”,如何从 Odoo 中的 Webhook 访问数据?的主要内容,如果未能解决你的问题,请参考以下文章

(17)C#的params参数关键字

Extjs formaction加载远程数据

深入requests库params|data|json参数

react路由传参的三种方式:

Python requests模块paramsdatajson的区别

requests 请求参数口诀