Python - 读取控制器内部的 headers?
Python - Read headers inside controller?
我正在源代码控制系统和 Odoo 之间构建 controller
,特定集成代码源代码控制系统(如 bitbucket,github)将能够使用 [=55] 有效负载数据=].实际有效载荷数据的读取工作正常,但我正在努力的是读取 controller
中的 headers
数据。
我需要 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)
现在看起来控制器自动读取headers,因为它理解它是json类型。但是,如果我需要手动检查特定的 header 数据,例如 headers['type']
(在我的示例中是 bitbucket
)怎么办?
我尝试查看 dir(self)
和 dir(request)
,但没有看到任何与 header 相关的内容。另外 **kwargs
是空的,所以那里没有 header。
注.: request
object 其实是:
# 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
有更多的经验,所以可以指出正确的方向吗?
P.S。同样在 Odoo 本身,我没有找到任何像我想要的那样读取 headers 的例子。看起来唯一使用 headers 的地方(实际上是设置它们而不是读取),是在事后构建响应时。
from openerp.http import request
在您的控制器中处理您的特定路径。您可以使用以下代码访问请求 headers。 (已确认 Odoo8、Odoo10...可能也适用于 Odoo9)
headers = request.httprequest.headers
我正在源代码控制系统和 Odoo 之间构建 controller
,特定集成代码源代码控制系统(如 bitbucket,github)将能够使用 [=55] 有效负载数据=].实际有效载荷数据的读取工作正常,但我正在努力的是读取 controller
中的 headers
数据。
我需要 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)
现在看起来控制器自动读取headers,因为它理解它是json类型。但是,如果我需要手动检查特定的 header 数据,例如 headers['type']
(在我的示例中是 bitbucket
)怎么办?
我尝试查看 dir(self)
和 dir(request)
,但没有看到任何与 header 相关的内容。另外 **kwargs
是空的,所以那里没有 header。
注.: request
object 其实是:
# 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
有更多的经验,所以可以指出正确的方向吗?
P.S。同样在 Odoo 本身,我没有找到任何像我想要的那样读取 headers 的例子。看起来唯一使用 headers 的地方(实际上是设置它们而不是读取),是在事后构建响应时。
from openerp.http import request
在您的控制器中处理您的特定路径。您可以使用以下代码访问请求 headers。 (已确认 Odoo8、Odoo10...可能也适用于 Odoo9)
headers = request.httprequest.headers