Django接口异常:POST数据提交成功但前端返回AssertionError,单条数据查询接口失效
问题解决:Django REST Framework视图错误修复
我来帮你搞定这两个接口的问题,咱们逐个分析:
1. POST接口的AssertionError问题
错误原因
你的postData视图在序列化器验证通过并保存数据后,没有返回任何响应对象。Django REST Framework要求视图必须返回Response、HttpResponse或HttpStreamingResponse类型的实例,但当前代码执行完serializer.save()后就结束了,默认返回None,这直接触发了断言错误。
修复代码
修改postData视图,在保存成功后返回序列化的数据,同时处理验证失败的情况:
from rest_framework import status # 记得导入status模块 @api_view(['POST']) def postData(request): serializer = WalletSerializer(data = request.data) if serializer.is_valid(): serializer.save() # 返回创建成功的数据,并设置标准的201创建状态码 return Response(serializer.data, status=status.HTTP_201_CREATED) # 验证失败时返回错误信息和400错误状态码 return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
2. 单条数据获取接口失效问题
错误原因
Wallet.objects.all(id=pk)是完全错误的用法:all()方法不接受任何参数,它的作用是返回模型的所有对象。你需要使用get()方法根据主键获取单条记录,或者用filter()筛选后取第一条。
修复代码
推荐使用get()并处理记录不存在的异常(更符合RESTful规范):
from rest_framework import status @api_view(['GET']) def getSingleData(request,pk): try: # 根据id获取单条Wallet记录 wallet = Wallet.objects.get(id=pk) except Wallet.DoesNotExist: # 如果记录不存在,返回404错误提示 return Response({"error": "Wallet not found"}, status=status.HTTP_404_NOT_FOUND) serializer = WalletSerializer(wallet, many=False) return Response(serializer.data)
如果你不想处理异常,也可以用filter()加判断的方式:
@api_view(['GET']) def getSingleData(request,pk): wallet = Wallet.objects.filter(id=pk).first() if not wallet: return Response({"error": "Wallet not found"}, status=status.HTTP_404_NOT_FOUND) serializer = WalletSerializer(wallet, many=False) return Response(serializer.data)
内容的提问来源于stack exchange,提问作者artistAhmed
相关产品推荐
相关产品推荐

