Python-在控制器内读取头文件?
我正在源代码管理系统和Odoo之间构建Python-在控制器内读取头文件?,python,openerp,werkzeug,request-headers,odoo-10,Python,Openerp,Werkzeug,Request Headers,Odoo 10,我正在源代码管理系统和Odoo之间构建controller,使特定的集成代码源代码管理系统(如bitbucket、github)能够使用json加载数据。读取实际的有效数据是可行的,但我正在努力的是读取标题控制器中的数据controller 我需要标题数据,以便识别从哪个系统接收此有效负载(例如,bitbucket和github中的数据结构可能不同)。现在,如果我阅读标题,我就会知道哪个系统有效加载数据以及如何正确解析数据 因此,我的控制器如下所示: from odoo import http
controller
,使特定的集成代码源代码管理系统(如bitbucket、github)能够使用json加载数据。读取实际的有效数据是可行的,但我正在努力的是读取标题控制器中的数据controller
我需要标题
数据,以便识别从哪个系统接收此有效负载(例如,bitbucket和github中的数据结构可能不同)。现在,如果我阅读标题
,我就会知道哪个系统有效加载数据以及如何正确解析数据
因此,我的控制器
如下所示:
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类型的。但是如果我需要手动检查特定的头数据,比如头['type']
(在我的示例中是比特桶
),该怎么办
我试图查看dir(self)
和dir(request)
,但没有看到任何与标题相关的内容。另外,**kwargs
为空,因此没有标题
注意。:请求
对象实际上是:
# 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
或控制器方面有更多的经验,所以可以为我指出正确的方向吗
另外,在奥多本身,我没有找到任何能像我所希望的那样阅读标题的例子。看起来,在构建响应时,唯一使用的位置标题(实际上是设置标题而不是读取标题)是在事实之后使用的
from openerp.http import request
在控制器内处理特定路径。您可以使用下面的代码访问请求头。(确认Odoo8、Odoo10……可能也适用于Odoo9)
你看过这里吗?谢谢。我在源代码中看到了这一点,但不知怎的,我认为它是针对http
routing类型的,我使用的是json
type。但不管是哪种类型,它都能工作。这正是我所需要的。相信我,我听到了。我在控制器方面做了很多工作。文档实际上淡化了请求和响应的哪些方面包含在哪里。当我为Odoo创建Facebook聊天机器人时,我花了大量时间试图确定响应对象的位置。这些文档让你看起来像是在**kw中找到了一切。这显然只是表面现象。祝你过得愉快。
headers = request.httprequest.headers