Django中的自定义HTTP标头

时间:2013-01-17 10:33:20

标签: django

我使用自定义http标头进行名为“sign”的URL签名,如何在Django中获取此类自定义HTTP标头值?

6 个答案:

答案 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

请参见django.http.HttpRequest.headers