【发布时间】:2019-08-01 04:57:49
【问题描述】:
我对我的 post 方法 API 的测试收到状态代码 200 但应该是 201 我试图找出问题所在,但我找不到。如果我得到错误状态 4xx 会更容易,但我不知道为什么 post 方法可以接收代码 200。我的 API 视图工作正常,所以这一定是测试代码的问题,但我真的不知道是什么可能导致这个问题.也许我错了,状态码 200 没问题,但我认为 post 方法应该收到状态 201。
test_api.py
def test_post_logged_in(self):
product = Product.objects.get(id=1)
self.client.login(username='test', password='test123')
data = {
'nick': self.user.id,
'rate': '1/5',
'content': 'here is comment',
'product': product.id
}
response = self.client.post(reverse('add_comments', kwargs={'id': product.id}), data, format='json')
self.assertEqual(response.status_code, 201, f'expected Response code 201, instead get {response.status_code}')
views.py
class CreateComment(APIView):
def get_object(self, id):
try:
return Product.objects.get(id=id)
except Product.DoesNotExist:
raise Http404
def get(self,request, id):
product = self.get_object(id)
serializer = ProductSerializer(product)
return Response(serializer.data)
def post(self, request,id):
serializer = CommentSerializer(data=request.data)
if serializer.is_valid():
serializer.save(nick=request.user, product=self.get_object(id))
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
【问题讨论】:
-
为什么不使用 ModelViewSet?
-
ModelViewSet 好很多?我最近学会了制作 API 视图,这是我目前能做的最好的。但我会检查这个 ModelViewSet。
-
是的,您应该使用 ModelViewSet。您不必自己处理所有的 CRUD 逻辑。 DRF 已经为您做到了。在此处查看视图集文档:django-rest-framework.org/tutorial/6-viewsets-and-routers
标签: python django unit-testing django-rest-framework