2

我正在controller源代码控制系统和 Odoo 之间构建特定的集成代码源代码控制系统(如 bitbucket、github)能够使用 json 加载数据。读取实际有效负载的数据正在工作,但我正在努力的是读取headers内部的数据controller

我需要headers数据,以便我可以识别从哪个系统接收到此有效负载(例如,bitbucket 和 github 中的数据结构可能不同)。现在,如果我读到它header,我就会知道哪个系统有效载荷数据以及如何正确解析它。

所以我的controller样子是这样的:

from odoo import http
from odoo.http import request


class GitData(http.Controller):
    """Controller responsible for receiving git data."""

    @http.route(['/web/git.data'], type='json', auth="public")
    def get_git_data(self, **kwargs):
        """Get git data."""
        # How to read headers inside here??
        data = request.jsonrequest
        # do something with data
        return '{"response": "OK"}'

例如,现在我可以调用这条路线:

import requests
import json

url = 'http://some_url/web/git.data'
headers = {
 'Accept': 'text/plain',
 'Content-Type': 'application/json',
 'type': 'bitbucket'}
data = {'some': 'thing'}

r = requests.post(url, data=json.dumps(data), headers=headers)

现在看起来控制器会自动读取标头,因为它知道它是 json 类型。但是,如果我需要手动检查特定的标头数据headers['type'](在我的示例中是bitbucket),该怎么办?

我尝试查看dir(self)and dir(request),但没有看到与标题相关的任何内容。也是**kwargs空的,所以那里没有标题。

笔记。:request对象实际上是:

# Thread local global request object
_request_stack = werkzeug.local.LocalStack()

request = _request_stack()
"""
    A global proxy that always redirect to the current request object.
""" 
# (This is taken from Odoo 10 source)

所以基本上它是 werkzeug 的一部分。

也许有人有更多的经验werkzeugcontrollers一般来说,所以可以指出我正确的方向吗?

PS 同样在 Odoo 本身中,我没有找到任何可以读取我想要的标题的示例。看起来唯一使用标头的地方(实际上是设置它们而不是读取),是在事后构建响应时。

4

1 回答 1

3
from openerp.http import request

在您的控制器中处理您的特定路径。您可以使用下面的代码访问请求标头。(确认 Odoo8,Odoo10 ... 可能也适用于 Odoo9)

headers = request.httprequest.headers
于 2017-01-04T20:37:22.007 回答