我在单元单元测试中使用我的 Django Rest Framework API 进行身份验证时遇到问题。通过浏览器访问时,系统按预期工作。但是,在以下端点向以下类发送 put 请求时,我收到 401 HTTP 状态:
class UserDetail(RetrieveModelMixin, DestroyModelMixin, UpdateModelMixin, GenericViewSet):
authentication_classes = (BasicAuthentication, TokenAuthentication)
permission_classes = IsAuthenticated,
queryset = CustomUser.objects.all()
serializer_class = UserSerializer
下面的测试如下:
class AccountTests(APITestCase):
def setUp(self):
self.user = CustomUser.objects.create_user(email="user1@test.com", password="password1", is_staff=True)
self.user.save()
self.user = CustomUser.objects.get(email="user1@test.com")
self.client = APIClient()
def test_add_name(self):
self.client.login(email="user1@test.com", password='password1')
url = reverse('customuser-detail', args=(self.user.id,))
data = {'first_name': 'test', 'last_name': 'user'}
self.client.login(email="user1@test.com", password='password1')
response = self.client.put(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_200_OK)
打印 response.data 时,我收到:
{u'detail': u'Authentication credentials were not provided.'}
client.login(...) 方法返回 true,但凭据似乎未附加到标头。我在 IsAuthenticated 权限类中的实验有一个 request.user = AnonymousUser。在 BasicAuthentication 类中,auth = None。
关于在 settings.py 中使用 BasicAuth,我是否遗漏了一些东西?甚至在测试本身?
谢谢。