已打开的django渠道使用者的API请求

时间:2019-01-23 14:47:07

标签: python django websocket django-rest-framework django-channels

我有一个django渠道消费者与客户交流。我有一个来自外部API的视图,该视图需要客户端提供一些东西。从这个观点来看,我然后要告诉该消费者通过其套接字向客户端提出请求。

我目前正在探索django rest框架,但目前找不到直接向该消费者询问任何内容的方法。 好吧,我有一个主意,但是它涉及创建另一个套接字并通过通道的通道进行通信。但我希望能摆脱这种超载。

1 个答案:

答案 0 :(得分:1)

从评论中的答复看来,您似乎想从DRF视图中通过使用者将消息发送给客户。您可以查看similar question的答案。

首先,您需要在使用者中使用一种方法,将信息发送回客户端:

...
async def send_alert(self, event):

    # Send message to WebSocket
    await self.send(text_data={
        'type': 'alert',
        'details': 'An external API api.external.com needs some data from you'
    })
...

因此,现在您可以向该方法发送消息。假设客户端已连接到channel1,则可以在您的视图中执行以下操作:

from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
...

channel_layer = get_channel_layer()
sync_to_async(channel_layer.send)("channel1", {
    "type": "send.alert"
})
...