如何在DRF ModelViewSet的POST请求成功时调用函数并传递数据
问题解答
1. 调用函数的位置说明
可以在POST请求成功后调用目标函数,你只需要重写ModelViewSet自带的create方法即可,代码写在UpdatedTypeViewSet类内部即可,只有创建成功的请求才会触发函数调用,完全匹配你的需求。
2. 传参方法
你需要先修改Send_The_Result函数新增形参接收数据,调用函数时根据业务需要传入原始请求数据、新创建的模型实例、序列化后的数据都可以。
调整后的完整代码
send_to_redmine.py
# send_to_redmine.py def Send_The_Result(post_data, created_instance): # post_data为本次POST提交的原始请求参数 # created_instance为本次请求创建成功的Updated_Type模型实例 # 你可以直接拿这两个参数的内容组装发往redmine的请求 pass if __name__ == '__main__': # 本地调试自行构造测试参数传入即可 Send_The_Result(test_data, test_instance)
views.py
# views.py from rest_framework import status from rest_framework.response import Response import schedule_update.send_the_result class UpdatedTypeViewSet(viewsets.ModelViewSet): queryset = Updated_Type.objects.all() serializer_class = UpdatedTypeSerializer def create(self, request, *args, **kwargs): # 原有创建逻辑保留 serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) self.perform_create(serializer) headers = self.get_success_headers(serializer.data) # 创建成功后调用目标函数,传入需要的参数 schedule_update.send_the_result.Send_The_Result( post_data = request.data, created_instance = serializer.instance ) # 返回原有响应结果 return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
补充说明
- 你可以根据业务需求只传指定字段给
Send_The_Result,不用全量传递请求数据和模型实例 - 如果函数执行耗时较长不想阻塞接口响应,可以改成异步任务执行
内容的提问来源于stack exchange,提问作者victor chang
相关产品推荐
相关产品推荐

