我正在使用友情Django模块和Django Rest Framework。在创建API时,Serializer的create()可能会引发一些异常 - AlreadyFriendsError,DoesNotExist或AssertionError。现在发生异常时,返回对象无效(无),并且我得到一个带有断言错误的回溯:create()
没有返回对象实例。
来自我的API views.py
class FriendManageAPIView(CreateAPIView):
permission_classes = (permissions.IsAuthenticated,)
serializer_class = FriendManageSerializer
def post(self, request, *args, **kwargs):
if request.data['action'] == 'add_friend':
return self.create(request, *args, **kwargs)
来自我的API serializers.py
class FriendManageSerializer(serializers.ModelSerializer):
to_user = serializers.CharField(max_length=150)
def create(self, validated_data):
friendship_ret = None
try:
request = self.context.get("request")
if request and hasattr(request, "user"):
user = request.user
user_model = get_user_model()
to_user = user_model.objects.get(username=request.data['to_user'])
friendship_ret = Friend.objects.create(
from_user=user, # The sender
to_user=to_user, # The recipient
)
friendship_ret.save()
except (AlreadyFriendsError, user_model.DoesNotExist, AssertionError):
print("EXCEPTION FriendManageSerializer.create()")
return friendship_ret
我该如何处理这个案子?当对象无效时我应该返回什么?
答案 0 :(得分:4)
如果您不想建立自定义错误(此处为DRF错误http://www.django-rest-framework.org/api-guide/exceptions/),我会选择验证错误。
您的错误告诉您需要使用某种对象进行响应,因为如果您的尝试失败,则会返回None
。
except (AlreadyFriendsError, user_model.DoesNotExist, AssertionError):
raise serializers.ValidationError("human readable error message here")
这应该可以解决您的要求。
代码的一些额外的Tipps: