【问题标题】:Custom HTTP Header in DjangoDjango 中的自定义 HTTP 标头
【发布时间】:2013-01-17 10:33:19
【问题描述】:

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

【问题讨论】:

    标签: django


    【解决方案1】:

    继续使用:

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

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

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

    【讨论】:

      【解决方案2】:

      我终于找到了通过它

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

      【讨论】:

      • 感谢您的帮助。除了将标题名称大写外,我还必须用下划线替换破折号。因此,标题名称“My-custom-header”是 request.META['HTTP_MY_CUSTOM_HEADER']
      • 此代码给出以下错误TypeError: 'dict' object is not callable。调用request.META.get('HTTP_{your uppercased header name}') 是正确的方法。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        但这对我不起作用,然后我意识到自定义标头不应该包含 underscore 所以我将 underscore 更改为 dash 并且繁荣,一切都开始工作了。希望这会帮助像我这样的人。 :-)

        【讨论】:

        • 这不是我的情况,但我相信您的评论很有用。
        【解决方案5】:

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

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

        django.http.HttpRequest.headers

        【讨论】:

        • 如何设置标题?
        【解决方案6】:

        来自 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。

        【讨论】:

          猜你喜欢
          • 2019-04-09
          • 2015-09-03
          • 2012-01-17
          • 2012-09-22
          • 2018-08-11
          • 2018-09-26
          • 2011-12-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多