Django test client发起请求时Token认证失败问题求助
问题原因及解决方案
你遇到的问题是Django TestClient的请求头传递规则和常规HTTP客户端不同导致的,具体修复方案如下:
方案1:按Django TestClient规则修改请求头键名
Django TestClient 要求自定义HTTP请求头必须满足两个规则:
- 键名添加
HTTP_前缀 - 键名中的横线替换为下划线
你原本的代码直接传Authorization键不符合规则,所以请求头没有被正确识别,修改后的代码如下:
headers = {'HTTP_AUTHORIZATION': 'Token ' + token} response = client.get('/api/v1/users/auth/user/', **headers)
方案2:使用DRF测试客户端自带的凭证设置方法(适用于Django REST Framework场景)
如果你用的是DRF的APIClient,可以直接调用credentials方法全局设置认证凭证,不需要每次请求手动传头:
from rest_framework.test import APIClient client = APIClient() client.credentials(HTTP_AUTHORIZATION='Token ' + token) response = client.get('/api/v1/users/auth/user/')
验证排查点
如果修改后仍有问题,可以打印请求的META信息确认头是否正确传入:
print(response.wsgi_request.META.get('HTTP_AUTHORIZATION'))
能正常打印出你的Token值就说明请求头已经正确传递了。
内容的提问来源于stack exchange,提问作者AlwaysLearning
相关产品推荐
相关产品推荐

