我使用djangorestframework并使用以下代码:
class RegistrationView(APIView):
def post(self, request, format=None):
print self.request.META.get('API_KEY')
并返回None
(其他标题,例如Content-Type
或User-Agent
即可。)
但是这个标题肯定存在于请求中(这个键只有local-db,所以可以将它粘贴到这里):
为什么?
答案 0 :(得分:12)
问题在于请求标题中的下划线。
将标题设置为 API-KEY
(使用连字符,而不是下划线),您可以使用
request.META.get('HTTP_API_KEY')
此行为的原因是某些服务器只是忽略下划线。
答案 1 :(得分:2)
任何自定义标头前缀为META中的HTTP_
个关键字。
因此您可以尝试访问标题,如
request.META.get('HTTP_API_KEY')
答案 2 :(得分:0)
有时,预处理框架(如用于缓存的Varnish)会设置为丢弃请求中找到的任何自定义标头。也许这样的事情在你的服务器上完成了?
答案 3 :(得分:0)
因为您同时使用基于令牌和基于会话的身份验证。我假设您通过浏览器对其进行测试,在这种情况下,您可以使用会话进行身份验证,您可以从Cookie中实际获取,然后反向选择用户以及令牌。
尽管如此,尝试使用Curl或任何REST客户端进行测试。打印出request.META
- 第一个密钥将是HTTP_AUTHORIZATION
。