在 Django Rest Framework 中使用视图集时如何编写 url 进行测试
How to write url for testing when using viewsets in Django Restframework
对于测试我真的是一窍不通。实际上,我不知道如何编写测试 url 来获取视图集的响应。
这是我的看法,
class AppraisalAPI(viewsets.ReadOnlyModelViewSet):
queryset = Appraisal.objects.all().order_by('-id')
serializer_class = AppraisalSerializer
def get_permissions(self):
if self.action in ['retrieve']:
self.permission_classes = [IsHRUser | IsManagementUser]
elif self.action in ['list']:
self.permission_classes = [IsUser]
return super(self.__class__, self).get_permissions()
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
data = instance.summary()
return Response(data)
这是我的 urls.py,
router = routers.DefaultRouter()
router.register('appraisal', AppraisalAPI)
urlpatterns = [
path('', include(router.urls)),
]
这是我的测试函数,
def test_appraisal_api_readonly(self):
url = reverse('appraisal-list')
self.client = Client(HTTP_AUTHORIZATION='Token ' + token.key)
resp1 = self.client.get(url, format='json')
self.assertEqual(resp1.status_code, 200)
此测试 url 仅进入列表操作。当我提供详细信息而不是列表时,它只会检索操作。
在这里,我想获得 Retrive 函数响应,在获得权限后如何获得我想接收 retrive 函数响应。
Anyhelp 可观的,..
因为你使用了DefaultRouter
,你可以用appraisal-detail
触发retrieve
动作,并且使用对象的主键,所以:
def test_appraisal_api_readonly(self):
url = reverse(<strong>'appraisal-detail', kwargs={'pk': <em>some_pk</em>}</strong>)
self.client = Client(HTTP_AUTHORIZATION='Token ' + token.key)
resp1 = self.client.get(url, format='json')
self.assertEqual(resp1.status_code, 200)
with some_pk
你在测试中构建的一些项目的主键(.pk
)。
对于测试我真的是一窍不通。实际上,我不知道如何编写测试 url 来获取视图集的响应。 这是我的看法,
class AppraisalAPI(viewsets.ReadOnlyModelViewSet):
queryset = Appraisal.objects.all().order_by('-id')
serializer_class = AppraisalSerializer
def get_permissions(self):
if self.action in ['retrieve']:
self.permission_classes = [IsHRUser | IsManagementUser]
elif self.action in ['list']:
self.permission_classes = [IsUser]
return super(self.__class__, self).get_permissions()
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
data = instance.summary()
return Response(data)
这是我的 urls.py,
router = routers.DefaultRouter()
router.register('appraisal', AppraisalAPI)
urlpatterns = [
path('', include(router.urls)),
]
这是我的测试函数,
def test_appraisal_api_readonly(self):
url = reverse('appraisal-list')
self.client = Client(HTTP_AUTHORIZATION='Token ' + token.key)
resp1 = self.client.get(url, format='json')
self.assertEqual(resp1.status_code, 200)
此测试 url 仅进入列表操作。当我提供详细信息而不是列表时,它只会检索操作。 在这里,我想获得 Retrive 函数响应,在获得权限后如何获得我想接收 retrive 函数响应。 Anyhelp 可观的,..
因为你使用了DefaultRouter
,你可以用appraisal-detail
触发retrieve
动作,并且使用对象的主键,所以:
def test_appraisal_api_readonly(self):
url = reverse(<strong>'appraisal-detail', kwargs={'pk': <em>some_pk</em>}</strong>)
self.client = Client(HTTP_AUTHORIZATION='Token ' + token.key)
resp1 = self.client.get(url, format='json')
self.assertEqual(resp1.status_code, 200)
with some_pk
你在测试中构建的一些项目的主键(.pk
)。