请求进入时的 Django Rest Framework 操作

Django Rest Framework action when request comes in

我正在为 API 创建一个使用 Django REST Framework 的 Django 项目。其他项目将向该项目发出 POST、PUT 和 DELETE 请求。当其中一个请求出现时,我想使用通道向 websocket 组发送消息。出于某种原因,我正在努力做到这一点。

我正在为名为 Thread 的模型使用扩展了 ModelViewSet 的 ThreadViewSet。

class ThreadViewSet(ModelViewSet):
    queryset = Thread.objects.all()
    serializer_class = ThreadSerializer

我已经尝试将频道调用添加到此 class 但它似乎不是 运行:

class ThreadViewSet(ModelViewSet):
    queryset = Thread.objects.all()
    serializer_class = ThreadSerializer
    channel_layer = get_channel_layer()
    async_to_sync(channel_layer.group_send)("group", {'type': 'new_message', 'message': "New Thread"})

我尝试的下一件事是重写 create()、update() 和 destroy(),这很有效,但对于一个简单的任务来说似乎需要做很多工作。我错过了什么吗?必须有更简单的方法来做到这一点。

如果每次收到请求时都应发送消息,您可以只覆盖调度方法:

class ThreadViewSet(ModelViewSet):
    queryset = Thread.objects.all()
    serializer_class = ThreadSerializer
    channel_layer = get_channel_layer()

    def dispatch(self, *args, **kwargs):
        async_to_sync(channel_layer.group_send)("group", {'type': 'new_message', 'message': "New Thread"})
        return super().dispatch(*args, **kwargs)

请记住,无论查询结果如何,这个都会始终触发消息 voer websocket。