2

controller特定の統合コード ソース コントロール システム (bitbucket、github など) が json を使用してデータをペイロードできるように、ソース コントロール システムと Odoo の間に構築しています。実際のペイロード データの読み取りは機能していますが、私が苦労しているのは、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)とを調べてみまし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 の一部です。

誰かが、werkzeugまたはcontrollers一般的な経験を積んでいるので、私を正しい方向に向けることができますか?

PSまた、Odoo自体で、私が望むようにヘッダーを読み取る例は見つかりませんでした。ヘッダーが使用される唯一の場所 (実際には読み取りではなく設定) は、事後、応答を戻すときに使用されます。

4

1 に答える 1

3
from openerp.http import request

特定のパスを処理するコントローラー内。以下のコードを使用して、リクエスト ヘッダーにアクセスできます。(確認済み Odoo8、Odoo10... おそらく Odoo9 でも動作します)

headers = request.httprequest.headers
于 2017-01-04T20:37:22.007 に答える