我试图用APITestCase测试Django REST框架AuthToken,但我总是得到状态代码400和消息:
b' {" non_field_errors":["无法使用提供的凭据登录。"]}'
奇怪的是,当我通过python manage.py shell
输入完全相同的命令时,我得到状态码200和身份验证令牌。
我在这里缺少什么?
这是我的代码:
from rest_framework.test import APITestCase
from rest_framework.authtoken.models import Token
from rest_framework.test import APIClient
class TestAuthToken(APITestCase):
def test_login_admin(self):
client = APIClient()
response = client.post('/api-token-auth/', {'username':'admin','password':'password123'})
self.assertEqual(response.status_code, 200)
更新 忘了为测试数据库创建用户......这里是新代码:
from django.contrib.auth.models import User
from rest_framework.test import APITestCase
from rest_framework.authtoken.models import Token
from rest_framework.test import APIClient
class TestAuthToken(APITestCase):
def setUp(self):
self.admin = User.objects.create_user('admin', 'admin@test.com', 'password123')
self.admin.save()
self.admin.is_staff = True
self.admin.save()
def test_login_admin(self):
client = APIClient()
response = client.post('/api-token-auth/', {'username':'admin','password':'password123'})
self.assertEqual(response.status_code, 200)
答案 0 :(得分:1)
您之前是否在测试用例的setUp中创建了用户? 因为django在运行测试时会创建一个测试数据库,并且在测试中为每个类获取为空(除非您指示您希望数据保存在测试之间的数据库中),并且如果您的代码检查数据库以查看是否凭证没问题,它会发现任何拥有该用户名和密码的用户都不存在。
答案 1 :(得分:0)
我来这里是为了寻找答案,以解决使用令牌时force_authenticate无法正常工作的问题。对于相同情况的用户,您需要以此答案https://stackoverflow.com/a/65154712/5253580
中指定的方式同时指定用户和令牌