django rest framework perform_update 或 post_save return 自定义响应
django rest framework perform_update or post_save return custom response
当对象早于 8 分钟时,我如何 return 自定义响应 json 错误。
这是我的代码,但响应不起作用:
def perform_update(self, serializer):
instance = serializer.save()
diff_minutes = (datetime.now() - instance.ordered_date).total_seconds() / 60
if diff_minutes > 8:
return Response({'expired': True}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
self.post_save(instance)
我使用 post_save
时也是如此。
我没有收到任何回复,它总是通过。
有什么建议吗?
在rest_framework
的代码中,perfrom_update
是这样调用的:
class UpdateModelMixin(object):
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
return Response(serializer.data)
如果你想修改回复的内容,你可以修改serializer.data
,但是你不能对状态做任何事情,因为它不是正确的地方 .
要验证您的数据,您应该按照文档中的说明添加一个验证器 http://www.django-rest-framework.org/api-guide/serializers/#validation
既然你想 return 一个 500 错误,那么你可以直接引发一个 APIException
。例如:
from rest_framework.exceptions import APIException
def perform_update(self, serializer):
instance = serializer.save()
diff_minutes = (datetime.now() - instance.ordered_date).total_seconds() / 60
if diff_minutes > 8:
raise APIException("expired")
self.post_save(instance)
提高APIException
将触发.handle_exception(self, exc)
功能。默认情况下 return 结果如下:
{detail : "expired" }
和 500
的状态代码。如果您需要更多地控制确切的 return 值/状态代码,您可以覆盖 handle_exception
函数并将其设置为 return 任何你喜欢的。
此外,由于显然我没有足够的代表发表评论,因此您向之前发布的解决方案提出疑问,说明您只想在更新时进行验证。您可以只覆盖序列化程序中的 update()
函数,它只会在更新时调用,而不是 create()
,后者将在您创建新对象时调用。
当对象早于 8 分钟时,我如何 return 自定义响应 json 错误。
这是我的代码,但响应不起作用:
def perform_update(self, serializer):
instance = serializer.save()
diff_minutes = (datetime.now() - instance.ordered_date).total_seconds() / 60
if diff_minutes > 8:
return Response({'expired': True}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
self.post_save(instance)
我使用 post_save
时也是如此。
我没有收到任何回复,它总是通过。
有什么建议吗?
在rest_framework
的代码中,perfrom_update
是这样调用的:
class UpdateModelMixin(object):
"""
Update a model instance.
"""
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
return Response(serializer.data)
如果你想修改回复的内容,你可以修改serializer.data
,但是你不能对状态做任何事情,因为它不是正确的地方 .
要验证您的数据,您应该按照文档中的说明添加一个验证器 http://www.django-rest-framework.org/api-guide/serializers/#validation
既然你想 return 一个 500 错误,那么你可以直接引发一个 APIException
。例如:
from rest_framework.exceptions import APIException
def perform_update(self, serializer):
instance = serializer.save()
diff_minutes = (datetime.now() - instance.ordered_date).total_seconds() / 60
if diff_minutes > 8:
raise APIException("expired")
self.post_save(instance)
提高APIException
将触发.handle_exception(self, exc)
功能。默认情况下 return 结果如下:
{detail : "expired" }
和 500
的状态代码。如果您需要更多地控制确切的 return 值/状态代码,您可以覆盖 handle_exception
函数并将其设置为 return 任何你喜欢的。
此外,由于显然我没有足够的代表发表评论,因此您向之前发布的解决方案提出疑问,说明您只想在更新时进行验证。您可以只覆盖序列化程序中的 update()
函数,它只会在更新时调用,而不是 create()
,后者将在您创建新对象时调用。