gpt4 book ai didi

python - 测试 post API 接收状态代码 200 而不是 201

转载 作者:行者123 更新时间:2023-12-01 01:08:34 24 4
gpt4 key购买 nike

我对 post 方法 API 的测试收到状态代码 200,但应该是 201 我试图找到问题所在,但找不到。如果我得到错误状态 4xx 会更容易,但我不知道为什么 post 方法可以接收代码 200。我的 API View 工作正常,所以这一定是测试代码的问题,但我真的不知道是什么可能导致这个问题。也许我错了,状态代码 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}')

View .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)

最佳答案

在您的 post() 中,您需要返回 status.HTTP_201_CREATED如果成功的话。

试试这个:

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, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

关于python - 测试 post API 接收状态代码 200 而不是 201,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55092365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com