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

Dea*_*ker 2 django django-middleware django-testing 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:
        # return None
        res =  HttpResponse("Invalid token", status=401)
        res["WWW-Authenticate"] = "Invalid Token"
        return res
Run Code Online (Sandbox Code Playgroud)

似乎工作正常,但我坚持通过设置带有有效令牌值的标头 HTTP_TOKEN 并获得 200 响应来编写测试。

我的示例测试代码

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

似乎总是失败。

mad*_*r93 5

Django 将 CUSTOM-HEADER 重命名为 HTTP_CUSTOM_HEADER。当您发送它时,它将在字典中HTTP_TOKEN重命名为。检查您获得的标头的一个简单方法是打印并检查控制台,或者在检查之前插入一个断点并检查相关 Django 文档的dict 链接。所以尝试:HTTP_HTTP_TOKENrequest.METArequest.METApdbrequest.META

    resp = self.client.get(reverse('productlist'),
                           **{'TOKEN':'8742627sdfsdfsf4e3423dsd23'})
Run Code Online (Sandbox Code Playgroud)

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