Django自定义中间件用于检查标头令牌。使用有效的请求标头令牌进行测试仍然失败

Django自定义中间件用于检查标头令牌。使用有效的请求标头令牌进行测试仍然失败,django,django-testing,django-middleware,django-tests,Django,Django Testing,Django Middleware,Django Tests,我正在检查自定义中间件中的请求头是否有有效令牌 class CustomTokenAuthentication(object): def process_request(self, request): access_token = request.META.get('HTTP_TOKEN', '') if AccessToken.objects.filter(token=access_token).exists(): return None else:

我正在检查自定义中间件中的请求头是否有有效令牌

class CustomTokenAuthentication(object):

def process_request(self, request):

    access_token = request.META.get('HTTP_TOKEN', '')
    if AccessToken.objects.filter(token=access_token).exists():
        return None
    else:
        # return None
        res =  HttpResponse("Invalid token", status=401)
        res["WWW-Authenticate"] = "Invalid Token"
        return res
似乎工作得很好,但我坚持写一个测试,通过设置一个带有有效令牌值的头HTTP_令牌并获得一个200响应

我的示例测试代码

def test_invalid_token_present(self):
    resp = self.client.get(reverse('productlist'), **{'HTTP_TOKEN':'8742627sdfsdfsf4e3423dsd23'})
    self.assertEqual(resp.status_code,200)

似乎总是失败

Django将CUSTOM-HEADER重命名为HTTP_CUSTOM_HEADER。当您发送它时,
HTTP\u令牌
将在
request.META
dict中重命名为
HTTP\u令牌
。一种简单的方法是在检查和检查前打印
request.META
并检查控制台或插入一个
pdb
断点
request.META
dict-。因此,请尝试:


我建议您限制行长度,这样人们就不必水平滚动来阅读代码。PEP-8规定了80个字符的限制。

在发送请求时尝试
HTTP-TOKEN
。抱歉,尝试使用
TOKEN
instead仍然会失败@热切Noobc您可以打印
request.META.keys()
的内容并进行检查。我的意思是在请求中尝试标头
TOKEN
。我真的试过了。如果它不起作用,那么我们必须查看
request.META
的内容。
    resp = self.client.get(reverse('productlist'),
                           **{'TOKEN':'8742627sdfsdfsf4e3423dsd23'})