首页 > 解决方案 > Django rest框架未经身份验证的用户在测试中获取请求错误

问题描述

我正在尝试测试需要对用户进行身份验证的 url 上的 get 请求。如果用户未经身份验证,它必须返回HTTP_401 UNAUTHORIZED错误作为响应状态代码。为此,我创建了一个测试用例,我尝试在没有身份验证的情况下触发 get 请求。

测试用例

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)

但测试失败返回错误:

TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是“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',)

如何修改我的视图以通过测试?

标签: pythondjango-rest-frameworktdd

解决方案


在 TagViewSet 尝试更改:

permission = (IsAuthenticated,)

到:

permission_classes = [IsAuthenticated]

推荐阅读