request.META不包含标题

时间:2017-03-02 19:24:32

标签: django django-rest-framework

我使用djangorestframework并使用以下代码:

class RegistrationView(APIView):
   def post(self, request, format=None):
      print self.request.META.get('API_KEY')

并返回None(其他标题,例如Content-TypeUser-Agent即可。)

但是这个标题肯定存在于请求中(这个键只有local-db,所以可以将它粘贴到这里):

Sniffer

为什么?

4 个答案:

答案 0 :(得分:12)

问题在于请求标题中的下划线。

将标题设置为 API-KEY (使用连字符,而不是下划线),您可以使用

捕获它
request.META.get('HTTP_API_KEY')

此行为的原因是某些服务器只是忽略下划线。

请参阅此相关问题Why underscores are forbidden in HTTP header names

答案 1 :(得分:2)

任何自定义标头前缀为META中的HTTP_个关键字。

因此您可以尝试访问标题,如

request.META.get('HTTP_API_KEY')

答案 2 :(得分:0)

有时,预处理框架(如用于缓存的Varnish)会设置为丢弃请求中找到的任何自定义标头。也许这样的事情在你的服务器上完成了?

答案 3 :(得分:0)

因为您同时使用基于令牌和基于会话的身份验证。我假设您通过浏览器对其进行测试,在这种情况下,您可以使用会话进行身份验证,您可以从Cookie中实际获取,然后反向选择用户以及令牌。

尽管如此,尝试使用Curl或任何REST客户端进行测试。打印出request.META - 第一个密钥将是HTTP_AUTHORIZATION