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