python - 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',)
如何修改我的视图以通过测试?
解决方案
在 TagViewSet 尝试更改:
permission = (IsAuthenticated,)
到:
permission_classes = [IsAuthenticated]
推荐阅读
- log4j - Web 服务/API 的 Log4j 属性
- cmd - 一次创建多个文件
- c# - 错误 400 - POST 上传文件 - 简单请求
- python - 如何在字符串数据列 [Python] 中计算 SQLAlchemy 中的数据?
- java - 为什么我无法捕捉到 TesseractException?
- c - 如何更改默认网关 vie C
- asp.net-mvc - 我想在现有 angular6 应用程序的虚拟目录中部署 ASP.Net Mvc 应用程序
- reactjs - 具有反应生产构建的快速路由器问题
- typescript - 当产生一个元组时,为什么打字稿会联合两个索引的类型?
- excel - Excel:如何将十进制数转换为 3 字节二进制数