是否可以与 Django Channels 进行私人聊天

问题描述 投票:0回答:2

我想与 Django 频道进行一对一的私人聊天,但我找不到任何关于它的文章/帖子,我看到的只是创建群聊。

在我看来,Django-channel 只能用于创建群聊和群游戏系统。 我想知道 django-channels 是否可以处理一对一的私人聊天以及我该如何处理。

提前致谢。

django django-channels
2个回答
4
投票

我不熟悉

django-channel
,但通读本教程,在我看来,您可以使用模型和权限来管理频道及其隐私。

class OneOnOneRoom(models.Model):
    user1 = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, related_name = 'user1')
    user2 = models.ForeignKey(User, null=True, on_delete=models.SET_NULL, related_name = 'user2')
    room_name = models.CharField(max_length = 128, unique=True)
    

然后供您查看(这是对文档

中示例的修改)
def room(request, room_name):
    if not OneOnOneRoom.objects.filter(room_name=room_name).exists():
        OneOnOneRoom.objects.create(...)#create the room with the users information forwarded with your request 
    room = OneOnOneRoom.objects.get(room_name=room_name)
    if request.User != room.user1 and request.User != room.user2:
            return HttpResponseBadRequest() #or deny permission some other way
    return render(request, 'chat/room.html', {
        
        'room_name_json': mark_safe(json.dumps(room_name))
    })

当用户尝试加入频道时,拒绝观看。

注意

我不确定这是否是比较用户的确切方式,但它应该传达这个想法


0
投票

我也很难找到有关此问题的信息,最终购买了一个像 @robotHamster 建议的那样的课程,但我觉得这个解决方案并不优雅。

你可以做的就是直接发送消息到其他频道,而不是其他群组(并让群组发送到其中的所有频道)。

更多信息在这里: https://channels.readthedocs.io/en/latest/topics/channel_layers.html#synchronous-functions

基本上,您将使用

channel_layer.group_send
,而不是使用
channel_layer.send

© www.soinside.com 2019 - 2024. All rights reserved.