我使用自定义http标头进行名为“sign”的URL签名,如何在Django中获取此类自定义HTTP标头值?
答案 0 :(得分:57)
继续使用:
request.META.get('HTTP_{your uppercased header name}')
请注意,在Django中,您使用下划线而不是破折号在大写字母中编写标题名称,但在客户端的请求中,您必须使用破折号而不是下划线来编写它(生产Web服务器将删除带有下划线的自定义标题以确保安全性原因)。
因此,访问自定义标头My-Custom-Header
request.META['HTTP_MY_CUSTOM_HEADER']
答案 1 :(得分:16)
最后我发现只是通过
request.META('HTTP_{your uppercased header name}')
答案 2 :(得分:12)
您可以将自己的自定义标头添加到响应中,如下所示: https://docs.djangoproject.com/en/dev/ref/request-response/#setting-headers
>>> response = HttpResponse()
>>> response['Cache-Control'] = 'no-cache'
>>> del response['Cache-Control']
或使用装饰器将它们添加到视图中: http://djangosnippets.org/snippets/275/
答案 3 :(得分:6)
我试图使用以下代码访问标题:
request.META.get('HTTP_{your uppercased header name}')
但它对我不起作用,然后我意识到自定义标题不应包含underscore
所以我用underscore
更改了dash
并且繁荣,一切都开始起作用了。希望这能帮助像我这样的人。 : - )
答案 4 :(得分:0)
来自Django文档:
https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.HttpRequest.META
如上所述,除了CONTENT_LENGTH和CONTENT_TYPE, 请求中的任何HTTP标头都将通过以下方式转换为META密钥 将所有字符都转换为大写字母,并将所有连字符替换为 下划线并在名称中添加HTTP_前缀。因此,例如 名为X-Bender的标头将映射到META密钥 HTTP_X_BENDER。
答案 5 :(得分:0)
从Django 2.2开始,您可以使用http://app_xx-server
字典,该字典提供不区分大小写的请求标头字典,例如:
HttpRequest.headers