Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django request.META不包含标头_Django_Django Rest Framework - Fatal编程技术网

Django request.META不包含标头

Django request.META不包含标头,django,django-rest-framework,Django,Django Rest Framework,我将djangorestframework与以下代码一起使用: class RegistrationView(APIView): def post(self, request, format=None): print self.request.META.get('API_KEY') 并且它返回None(其他标题,如Content-Type或User-Agent都可以) 但是这个头肯定存在于请求中(这个键只是本地数据库,所以可以将它粘贴到这里): 为什么?任何自定义头在MET

我将djangorestframework与以下代码一起使用:

class RegistrationView(APIView):
   def post(self, request, format=None):
      print self.request.META.get('API_KEY')
并且它返回
None
(其他标题,如
Content-Type
User-Agent
都可以)

但是这个头肯定存在于请求中(这个键只是本地数据库,所以可以将它粘贴到这里):


为什么?

任何自定义头在META中都带有
HTTP
关键字

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

request.META.get('HTTP_API_KEY')

有时,预处理框架(如Varnish for caching)被设置为丢弃在请求中找到的任何自定义头。可能在您的服务器上执行类似的操作?

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


尽管如此,请尝试使用Curl或任何REST客户机进行测试。打印出
request.META
-第一个键是
HTTP\u AUTHORIZATION

问题在于请求头中的下划线

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

request.headers.get('HTTP_API_KEY')
这种行为的原因是某些服务器忽略下划线

看这个相关的问题


在Django的旧版本上:
request.META.get('HTTP\u-API\u-KEY')

这是本地开发服务器(嵌入Django中)。这是我遇到的一些最古怪的行为。。。无提示地忽略标题,没有任何解释或警告。