You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django应用测试:APIClient获取API Token失败求助

Django APIClient 获取Token失败的解决办法

可能的原因及对应方案

1. 测试数据库未创建目标用户

测试用例默认使用独立的测试数据库,和本地开发/生产数据库不共享数据,你用到的root用户大概率不存在于测试库中。解决方法是在测试用例的初始化步骤里创建测试用户:

from django.contrib.auth.models import User
from rest_framework.test import APIClient, TestCase

class TokenTest(TestCase):
    def setUp(self):
        # 创建带哈希密码的测试用户
        self.user = User.objects.create_user(username='root', password='root')
        self.client = APIClient()

    def test_obtain_token(self):
        response = self.client.post('/api-token-auth/', data={"username":"root", "password":"root"})
        # 验证请求成功并返回Token
        self.assertEqual(response.status_code, 200)
        self.assertIn('token', response.json())

2. 请求数据格式不匹配

如果你的/api-token-auth/视图仅接受JSON格式请求,而APIClient的data参数默认发送表单编码数据,此时需要改用json参数传递请求体:

# 用json参数替代data,直接发送JSON格式数据
response = self.client.post('/api-token-auth/', json={"username":"root", "password":"root"})
token_data = response.json()

3. 用户密码未正确哈希

如果手动创建用户时用了User.objects.create而非create_user,密码会以明文存储,导致认证失败。必须确保密码经过哈希处理:

# 错误示例:密码未哈希
user = User.objects.create(username='root', password='root')

# 正确示例1:用create_user自动哈希
user = User.objects.create_user(username='root', password='root')

# 正确示例2:手动设置哈希密码
user = User.objects.create(username='root')
user.set_password('root')
user.save()

4. 检查测试环境配置

确认测试环境的settings.py中,REST Framework的认证配置正确:

  • INSTALLED_APPS包含rest_framework.authtoken
  • DEFAULT_AUTHENTICATION_CLASSES包含rest_framework.authentication.TokenAuthentication

内容的提问来源于stack exchange,提问作者koolaa12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 12:22:13