Django rest framework 在Django Rest框架中使用身份验证测试POST问题401

Django rest framework 在Django Rest框架中使用身份验证测试POST问题401,django-rest-framework,Django Rest Framework,我试图在django rest框架中测试向需要身份验证的视图发布数据。但我不能。我读过很多假定的解决方案,但找不到任何对我有帮助的 测试: class TodoListCreateAPIViewTestCase(APITestCase): url = reverse("todolist:add") def setUp(self): self.username = &qu

我试图在django rest框架中测试向需要身份验证的视图发布数据。但我不能。我读过很多假定的解决方案,但找不到任何对我有帮助的

测试

     class TodoListCreateAPIViewTestCase(APITestCase):
            url = reverse("todolist:add")
        
            def setUp(self):
                self.username = "john"
                self.email = "john@snow.com"
                self.password = "you_know_nothing"
                self.user = User.objects.create_user(self.username, self.email, self.password)
                self.token = Token.objects.create(user=self.user)

 


  #checking token here
  def test_create_todo(self):
        self.client.login(email=self.email, password='you_know_nothing')
        client = APIClient()
        client.credentials(HTTP_AUTHORIZATION='Token ' + self.token.key)

        response = self.client.post(self.url, {"list_name": "Clean the room!"}, format='json')
        self.assertEqual(201, response.status_code)
查看

class Addtodolist(APIView):
    authentication_classes = (JSONWebTokenAuthentication,TokenAuthentication)
    permission_classes = [IsAuthenticated, ]

    def post(self, request):
        data = request.data
        todolist_instance = Todolist.objects.filter(for_user=self.request.user).first()

        if not todolist_instance:
            list_serilaizer = AddtodolistSerializers(data=data, context={'user': request.user})
            if list_serilaizer.is_valid():
               list_serilaizer.save()
               return Response(data=success_response(data=list_serilaizer.data, msg='Successfully Created list!'),
                            status=status.HTTP_200_OK)
            else:
                return Response(
                    failure_response(data={'detail': list_serilaizer.errors()}, msg='Following errors occured'),
                    status=status.HTTP_400_BAD_REQUEST)
        else:
            return Response(
                failure_response(data={'detail': 'User can have only 1 List'}, msg='User can have only 1 List'),
                status=status.HTTP_409_CONFLICT)

按如下方式更改代码:

从django.shortcuts反向导入
从django.contrib.auth导入get\u user\u模型
从rest\u framework.test导入APIClient、APITESCASE
从rest_framework.authtoken.models导入令牌
类TodoListCreateAPIViewTestCase(APITestCase):
url=反向(“todolist:add”)
def设置(自):
self.username=“john”
self.email=”john@snow.com"
self.password=“你什么都不知道”
self.user=get\u user\u model().objects.create\u user(self.username,
self.email,
密码)
self.token=token.objects.create(user=self.user)
def测试\创建\待办事项(自我):
client=APIClient()
client.login(username=self.username,
email=self.email,
密码=self.password)
client.credentials(HTTP_AUTHORIZATION='Token'+self.Token.key)
响应=client.post(self.url,
{“名单名称”:“打扫房间!”},
格式(json)
self.assertEqual(response.status_代码,201)

您应该使用
client.post(…)
而不是
self.client.post(…)