如何将 signals.py 错误消息呈现给 django-rest API?

How to render signals.py error message to the django-rest API?

我正在尝试将错误消息从 Django signals.py 文件渲染到 django-restframework views.py。我这样创建了 views.py 文件,

class HazardIndexViewSet(viewsets.ModelViewSet):
    queryset = HazardIndex.objects.all()
    serializer_class = HazardIndexSerializer
    permission_classes = [permissions.IsAuthenticated]

我的 signals.py 文件看起来像,

@receiver(post_save, sender=HazardIndex)
def publish_to_geoserver(instance, created, *args, **kwrgs):
    try:
        geo.create_coveragestore(instance.name, instance.workspace_name, path=instance.file)
    except Exception as e:
        instance.delete()
        print("Something is wrong while creating coveragestore")     

我希望此打印语句(print("Something is wrong while creating coveragestore")) 显示API 中的错误消息。另一件事是,我只想在 publish_to_geosever 函数成功运行时创建实例。否则它应该通过错误。有帮助吗?

您可以引发 rest_franework 异常,以便它出现在 API 中。我在这里使用 ValidationError 因为它在响应中给出 400 状态代码,在正文中它会显示您的打印消息:

from rest_framework.exceptions import ValidationError

@receiver(post_save, sender=HazardIndex)
def publish_to_geoserver(instance, created, *args, **kwrgs):
    try:
        geo.create_coveragestore(instance.name, instance.workspace_name, path=instance.file)
    except Exception as e:
        instance.delete()
        raise ValidationError("Something is wrong while creating coveragestore")   

关于你关于成功创建的第二个问题,我想保持原样是可以的,因为它会尝试创建你的地理对象,如果不能,那么它会在 API.