我正在使用Django Rest Framework,我正在发出DELETE请求。与 POST、PUT、PATCH 相反,它们都返回对象创建/修改后的状态,delete 不会返回正文中的任何内容(仅返回 204 代码(。
在尝试将响应与其原始请求联系起来时,拥有此信息将很有帮助。特别是 https://github.com/agraboso/redux-api-middleware 在告诉我什么成功和什么错误方面做得不好(
有没有办法强制 DRF 添加有关响应正文中删除的内容的信息?
谢谢!
用可操作的代码补充@Linovia的完整答案。
在视图集中,添加以下内容将有所帮助
class WhateverYourModelIsViewSet(viewsets.ModelViewSet):
def destroy(self, *args, **kwargs):
serializer = self.get_serializer(self.get_object())
super().destroy(*args, **kwargs)
return response.Response(serializer.data, status=status.HTTP_200_OK)
需要注意的几点:
返回- 204 代码实际上会删除数据,您必须返回其他内容
- 在调用销毁之前,需要从序列化程序中提取数据
编辑:
自从我第一次发布我的答案以来,我发现自己经常需要做上述事情。更具可扩展性的解决方案:
class DestroyWithPayloadMixin(object):
def destroy(self, *args, **kwargs):
serializer = self.get_serializer(self.get_object())
super().destroy(*args, **kwargs)
return response.Response(serializer.data, status=status.HTTP_200_OK)
class WhateverYourModelIsViewSet(DestroyWithPayloadMixin, viewsets.ModelViewSet):
# Your implementation
pass
当然。在您看来,您必须覆盖destroy
。默认实现 - 在撰写此答案时 - 是:
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
self.perform_destroy(instance)
return Response(status=status.HTTP_204_NO_CONTENT)