【问题标题】:Is it Possible to do a private chat with Django Channels是否可以与 Django 频道进行私人聊天
【发布时间】:2018-11-09 01:28:20
【问题描述】:

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

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

提前致谢。

【问题讨论】:

    标签: django django-channels


    【解决方案1】:

    我不熟悉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)
        
    

    那么为了你的看法(这是对documentation中示例的修改

    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))
        })
    

    当用户尝试加入频道时,拒绝该视图。

    注意

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

    【讨论】:

    • 这与我想要的类似,但如果用户想要创建对话,它将拒绝该用户。
    • 编辑了创建房间的答案,以防它不存在,您需要在您的请求或 url @Starbody 中传递一些信息
    • 好的,如果我没听错的话,每次对话都会为想要聊天的双方创建一个房间?
    • 是的,除非它存在,否则他们只是加入它而不是创建一个新的
    • if request.User != room.user1 or request.User != room.user2:or 应该是and
    【解决方案2】:

    我也很难找到有关这方面的信息,并最终购买了一门像 @robotHamster 建议的那样做的课程,但我发现该解决方案并不优雅。

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

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

    基本上,您将使用channel_layer.send,而不是使用channel_layer.group_send

    【讨论】:

      猜你喜欢
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      • 2017-06-12
      • 1970-01-01
      相关资源
      最近更新 更多