使用有效请求 header 令牌检查 header token.Tests 的 Django 自定义中间件仍然失败
Django custom middleware to check header token.Tests with valid request header tokens still fails
我正在检查请求 header 以获取自定义中间件中的有效令牌。
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
似乎工作正常,但我坚持通过设置 header HTTP_TOKEN 和有效的令牌值并获得 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_TOKEN
时,它将在 request.META
字典中重命名为 HTTP_HTTP_TOKEN
。检查 headers 你得到什么的一个简单方法是打印 request.META
并检查控制台或在检查之前插入一个 pdb
断点并检查 request.META
字典 - link to relevant Django doc。所以尝试:
resp = self.client.get(reverse('productlist'),
**{'TOKEN':'8742627sdfsdfsf4e3423dsd23'})
我建议您限制行的长度,这样人们就不必水平滚动来阅读您的代码。 PEP-8 规定了 80 个字符的限制。
我正在检查请求 header 以获取自定义中间件中的有效令牌。
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
似乎工作正常,但我坚持通过设置 header HTTP_TOKEN 和有效的令牌值并获得 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_TOKEN
时,它将在 request.META
字典中重命名为 HTTP_HTTP_TOKEN
。检查 headers 你得到什么的一个简单方法是打印 request.META
并检查控制台或在检查之前插入一个 pdb
断点并检查 request.META
字典 - link to relevant Django doc。所以尝试:
resp = self.client.get(reverse('productlist'),
**{'TOKEN':'8742627sdfsdfsf4e3423dsd23'})
我建议您限制行的长度,这样人们就不必水平滚动来阅读您的代码。 PEP-8 规定了 80 个字符的限制。