通过django频道向特定用户发送通知

时间:2018-06-13 16:00:15

标签: python django django-channels

XY是两个PersonXY发送了一个朋友请求,因此在Y个人资料中会显示好友请求的通知。然后Y接受了好友请求,因此在X个人资料中也会出现接受好友请求的通知。

我知道django频道可以处理实时通知,并且可以通过用户创建分组来解决。

但是,为每个特定用户创建群组是最佳做法吗?有没有其他方法可以解决这个问题?

1 个答案:

答案 0 :(得分:1)

向个人用户发送消息的最简单方法是将该用户添加到消费者connect()方法的各自组中。

class Consumer(WebsocketConsumer):
    def connect(self):
        self.group_name = self.scope['user'].pk

        # Join group
        async_to_sync(self.channel_layer.group_add)(
            self.group_name,
            self.channel_name
        )
        self.accept()

每当用户访问yourapp.routing.websocket_urlpatterns中指定的页面时,他们都会自动添加到该组中,因此无需做太多工作。

发送邮件也很简单,因为邮件已经包含了user.pk个目标。

def ajax_accept_friend_request(request):
    friend = request.GET.get('id', None)
    channel_layer = get_channel_layer()

    # Trigger message sent to group
    async_to_sync(channel_layer.group_send)(
        friend,
        {
            'type': 'your_message_method',
            'accept': True
        }
    )
    return HttpResponse()