我为 URL 签名使用了一个自定义的 http 标头,称为“sign”,如何在 Django 中获取这样的自定义 HTTP 标头值?
6 回答
继续使用:
request.META.get('HTTP_{your uppercased header name}')
请注意,在 Django 中,您使用大写字母而不是短划线来编写标头名称,但是在客户端的请求中,您必须使用短划线而不是下划线来编写它(出于安全原因,生产 Web 服务器将删除带有下划线的自定义标头)。
因此,My-Custom-Header
访问自定义标头request.META['HTTP_MY_CUSTOM_HEADER']
最后我发现只是通过
request.META('HTTP_{your uppercased header name}')
您可以将自己的自定义标头添加到响应中,如下所示: 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/
我试图使用以下代码访问具有上述答案的标题:
request.META.get('HTTP_{your uppercased header name}')
但它对我不起作用,然后我意识到自定义标题不应该包含underscore
所以我改变了underscore
withdash
和 boom,一切都开始工作了。希望这会帮助像我这样的人。:-)
从 Django 2.2 开始,您可以使用HttpRequest.headers
提供不区分大小写的请求标头字典的字典,如下所示:
my_header = request.headers.get('x-my-custom-header')
从 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。