Django rest 框架未经身份验证的用户在测试中获取请求错误
Django rest framework unauthenticated user get request error in testing
我正在尝试测试 url 上的获取请求,该请求需要对用户进行身份验证。如果用户未经身份验证,则必须 return HTTP_401 UNAUTHORIZED 错误作为响应状态代码。为此,我创建了一个测试用例,我尝试在没有身份验证的情况下触发获取请求。
测试用例
class PublicTagsApiTests(TestCase):
"""Test the publicly available tags API"""
def setUp(self):
self.client = APIClient()
def test_login_required(self):
"""Test that login is required for retrieving tags"""
res = self.client.get(reverse('recipe:tag-list'))
self.assertEqual(res.status_code, status.HTTP_401_UNAUTHORIZED)
但是测试失败return错误:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'AnonymousUser'
查看
class TagViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
"""Manage tags in the database"""
authentication_classes = (TokenAuthentication,)
permission = (IsAuthenticated,)
queryset = Tag.objects.all()
serializer_class = serializers.TagSerializer
def get_queryset(self):
"""Return objects for the current authenticated user only"""
return self.queryset.filter(user=self.request.user).order_by('-name')
序列化器
class TagSerializer(serializers.ModelSerializer):
"""Serializer for tag objects"""
class Meta:
model = Tag
fields = ('id','name')
read_only_fields = ('id',)
如何修改我的视图以通过测试?
在 TagViewSet 中尝试更改:
permission = (IsAuthenticated,)
至:
permission_classes = [IsAuthenticated]
我正在尝试测试 url 上的获取请求,该请求需要对用户进行身份验证。如果用户未经身份验证,则必须 return HTTP_401 UNAUTHORIZED 错误作为响应状态代码。为此,我创建了一个测试用例,我尝试在没有身份验证的情况下触发获取请求。
测试用例
class PublicTagsApiTests(TestCase):
"""Test the publicly available tags API"""
def setUp(self):
self.client = APIClient()
def test_login_required(self):
"""Test that login is required for retrieving tags"""
res = self.client.get(reverse('recipe:tag-list'))
self.assertEqual(res.status_code, status.HTTP_401_UNAUTHORIZED)
但是测试失败return错误:
TypeError: int() argument must be a string, a bytes-like object or a number, not 'AnonymousUser'
查看
class TagViewSet(viewsets.GenericViewSet, mixins.ListModelMixin):
"""Manage tags in the database"""
authentication_classes = (TokenAuthentication,)
permission = (IsAuthenticated,)
queryset = Tag.objects.all()
serializer_class = serializers.TagSerializer
def get_queryset(self):
"""Return objects for the current authenticated user only"""
return self.queryset.filter(user=self.request.user).order_by('-name')
序列化器
class TagSerializer(serializers.ModelSerializer):
"""Serializer for tag objects"""
class Meta:
model = Tag
fields = ('id','name')
read_only_fields = ('id',)
如何修改我的视图以通过测试?
在 TagViewSet 中尝试更改:
permission = (IsAuthenticated,)
至:
permission_classes = [IsAuthenticated]