gpt4 book ai didi

python - 如何从django信号返回数据?

转载 作者:行者123 更新时间:2023-12-04 08:11:26 25 4
gpt4 key购买 nike

我正在使用 Django-rest 来开发 API。就我而言,当用户发布数据时,我必须处理发布的数据(需要 2-3 分钟)。我编写了用于预处理数据的 Django 信号。我的 signal.py 文件看起来像这样,

@receiver(post_save, sender=ExposureIndex)
def calculate_exposure(instance, created, *args, **kwargs):
ear_table = instance.ear_index.name
haz_dir = instance.hazard_index.file.path

# calling celery task
task = exposure_calculation.delay(ear_table,haz_dir)

return task.id

我的 celery 计算功能就在这里,
@shared_task(bind=True)
def exposure_calculation(self, ear_table, haz_dir):
progress_recorder = ProgressRecorder(self)

CalculateExposure(ear_table, haz_dir)

return 'Done'
我的 django-rest View 函数是这样的,
class ExposureIndexViewSet(viewsets.ModelViewSet):
queryset = ExposureIndex.objects.all()
serializer_class = ExposureIndexSerializer
permission_classes = [permissions.IsAuthenticated]

我的问题是当用户发布数据时,我想返回 task.id 而不是返回实际响应(我试图从 Django 信号返回它,但它没有在实际 API 中返回)。谁能告诉我如何退货 task.id当用户发布 exposureIndexData 时立即?

最佳答案

我认为你应该覆盖 create views.py 中的方法而不是创建信号实例。在 views.py 文件中做这样的事情

class ExposureIndexViewSet(viewsets.ModelViewSet):
queryset = ExposureIndex.objects.all()
serializer_class = ExposureIndexSerializer
permission_classes = [permissions.IsAuthenticated]

def create(self, request, *args, **kwargs):
response = super().create(request, *args, **kwargs)
instance = response.data
ear_table = instance['ear_table']
haz_dir = instance['haz_dir']

serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)

task = exposure_calculation.delay(ear_table,haz_dir)

return Response({'task_id': task.id})

关于python - 如何从django信号返回数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65934969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com