首页 > 解决方案 > 将数据发送到 Django 通道

问题描述

我有一个每秒生成 JSON 数据的外部 Python 脚本;另一方面,我有一个 Django 应用程序。我想在我的 Django 应用程序的网页上流式传输这些数据。我已经用 Django 通道构建了一个消费者,但我不知道如何让 Django 拥有我从其他 Python 脚本生成的数据。

这是我的基本消费者:

class EchoConsumer(AsyncConsumer):
    async def websocket_connect(self, event):
        print("connected", event)


        await self.send({
            "type": "websocket.accept"
        })


    async def websocket_receive(self, event):
        print("received", event)
        # Echo the same received payload

    async def websocket_disconnect(self, event):
        print("disconnected", event)

有没有具体的方法可以做到这一点?还是我应该在中间使用其他服务?任何建议表示赞赏

标签: pythondjangowebsocketdjango-channels

解决方案


您可以做的是使用 @database_sync_to_async 装饰器将该数据倒入数据库模型。看看下面的例子

 async def websocket_receive(self, event):
   message = await self.create_message_db(event.get('data'))

 @database_sync_to_async
  def create_message_db(self, data):
      return Message.objects.create(thread=self.thread, sender=self.scope['user'], 
             body=data['message'])

推荐阅读