Django测试:如何获取响应数据中的Token用于后续操作
解决获取登录响应中token的问题
我刚看了你的问题,你遇到的核心问题是Django REST Framework测试响应对象本身没有直接的data属性,得先把响应内容解析成Python字典才能拿到token。
修改后的测试代码
def test_login_user(self): client = APIClient() url = reverse('rest_login') data = { 'username': 'test', 'password': 'Welcome2' } response = client.post(url, data) self.assertEqual(response.status_code, status.HTTP_200_OK) # 关键步骤:将响应内容解析为JSON字典 response_data = response.json() # 提取token值,用get方法可以避免键不存在时报错,更安全 token = response_data.get('token') # 示例:用token做后续认证操作 client.credentials(HTTP_AUTHORIZATION=f'Token {token}') # 这里可以添加后续需要认证的测试请求,比如获取用户信息、修改资料等 client.logout()
为什么原来的方式不行?
当你通过APIClient发送请求后,返回的response是Django的HttpResponse子类对象,它的响应体是JSON格式的字符串,而不是直接的字典。你需要调用.json()方法把这个字符串转换成Python字典,之后就能通过键名(比如'token')获取对应的值了。
另外提个小细节:你先实例化了client = APIClient(),但后面用了self.client.post,如果你的测试类继承了APITestCase,self.client已经是APIClient实例,两者选一个用就行,避免代码混淆。
内容的提问来源于stack exchange,提问作者whoisearth
相关产品推荐
相关产品推荐

