41

我为 URL 签名使用了一个自定义的 http 标头,称为“sign”,如何在 Django 中获取这样的自定义 HTTP 标头值?

4

6 回答 6

77

继续使用:

request.META.get('HTTP_{your uppercased header name}')

请注意,在 Django 中,您使用大写字母而不是短划线来编写标头名称,但是在客户端的请求中,您必须使用短划线而不是下划线来编写它(出于安全原因,生产 Web 服务器将删除带有下划线的自定义标头)。

因此,My-Custom-Header访问自定义标头request.META['HTTP_MY_CUSTOM_HEADER']

于 2014-06-22T21:03:40.027 回答
16

最后我发现只是通过

request.META('HTTP_{your uppercased header name}')
于 2013-01-17T10:47:00.673 回答
15

您可以将自己的自定义标头添加到响应中,如下所示: 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/

于 2013-01-17T10:39:08.767 回答
7

我试图使用以下代码访问具有上述答案的标题:

request.META.get('HTTP_{your uppercased header name}')

但它对我不起作用,然后我意识到自定义标题不应该包含underscore所以我改变了underscorewithdash和 boom,一切都开始工作了。希望这会帮助像我这样的人。:-)

于 2016-09-24T10:06:00.240 回答
5

从 Django 2.2 开始,您可以使用HttpRequest.headers提供不区分大小写的请求标头字典的字典,如下所示:

my_header = request.headers.get('x-my-custom-header')

django.http.HttpRequest.headers

于 2019-08-15T09:07:44.040 回答
1

从 Django 文档中:

https://docs.djangoproject.com/en/2.1/ref/request-response/#django.http.HttpRequest.META

除了上面给出的 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 标头都通过将所有字符转换为大写、用下划线替换任何连字符并在名称中添加 HTTP_ 前缀来转换为 META 键。因此,例如,名为 X-Bender 的标头将映射到 META 键 HTTP_X_BENDER。

于 2018-10-17T17:52:04.903 回答