我正在django中向我的视图发送一些自定义标题,如下所示:
$.ajax({
type: 'POST',
url: url,
headers: { 'x-my-custom-header': 'some value' },
data: params,
success:gi.payU.updatePaymentMethods
});
我正在接受请求,如下所示:
'HTTP_REFERER': 'http://some_url/',
'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36',
'HTTP_X_MY_CUSTOM_HEADER': 'some value', ## <-- my value
'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest',
在django中读取此内容的正确方法是什么?
我尝试了下面列出的多种方式,但似乎都没有:
(Pdb) request.COOKIES["HTTP_X_MY_CUSTOM_HEADER"]
*** KeyError: 'HTTP_X_MY_CUSTOM_HEADER'
(Pdb) request.X_MY_CUSTOM_HEADER
*** AttributeError: 'WSGIRequest' object has no attribute 'X_MY_CUSTOM_HEADER'
(Pdb) request.HTTP_X_MY_CUSTOM_HEADER
*** AttributeError: 'WSGIRequest' object has no attribute 'HTTP_X_MY_CUSTOM_HEADER'
(Pdb) request.http_x-my-custom-header
*** AttributeError: 'WSGIRequest' object has no attribute 'http_x'
(Pdb) request.HTTP_X_MY_CUSTOM_HEADER
*** AttributeError: 'WSGIRequest' object has no attribute 'HTTP_X_MY_CUSTOM_HEADER'
(Pdb) request["HTTP_X_MY_CUSTOM_HEADER"]
*** TypeError: 'WSGIRequest' object has no attribute '__getitem__'
它最终起作用如下:
request.META["HTTP_X_MY_CUSTOM_HEADER"] # note "HTTP_" append
问题:
我的varibale名称是a,b,c
我需要追加 http
到每个变量才能访问它吗?喜欢:
http_a
http_b
http_b
http_d
有没有更好的方法来访问这里我可以直接访问变量名称,就像我们根据键获取dict
值一样?
答案 0 :(得分:1)
对于以&#39; HTTP _&#39;为前缀的密钥,您说得对。
从the docs开始,这就是Django构建密钥的方式:
除了CONTENT_LENGTH和CONTENT_TYPE之外,如上所述,请求中的任何HTTP头都将转换为META密钥,方法是将所有字符转换为大写,用下划线替换任何连字符,并在名称中添加HTTP_前缀。因此,例如,名为X-Bender的标头将映射到META密钥HTTP_X_BENDER。
您可以遍历所有标头并反转此过程以获取原始标头密钥。