是否可以与 Django Channels 进行私人聊天
Is it Possible to do a private chat with Django Channels
我想与 Django-channels 进行一对一的私人聊天,但我找不到任何关于它的 article/post,我所看到的只是创建群聊。
在我看来,Django-channel 只能用于创建群聊和群游戏系统。
我想知道 django-channels 是否可以处理一对一的私人聊天,我该怎么做。
提前致谢。
我不熟悉 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))
})
当用户尝试加入频道时,拒绝观看。
注意:
我不确定这是否是您比较用户的确切方式,但它应该传达了这个想法
我也很难找到有关此的信息,最终购买了一个像@robotHamster 建议的那样的课程,但我没有发现该解决方案很优雅。
你可以做的是直接向其他频道发送消息,而不是向其他群组发送消息(并让群组发送到其中的所有频道)。
更多信息在这里:
https://channels.readthedocs.io/en/latest/topics/channel_layers.html#synchronous-functions
基本上,您将使用 channel_layer.send
。
而不是使用 channel_layer.group_send
我想与 Django-channels 进行一对一的私人聊天,但我找不到任何关于它的 article/post,我所看到的只是创建群聊。
在我看来,Django-channel 只能用于创建群聊和群游戏系统。 我想知道 django-channels 是否可以处理一对一的私人聊天,我该怎么做。
提前致谢。
我不熟悉 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))
})
当用户尝试加入频道时,拒绝观看。
注意:
我不确定这是否是您比较用户的确切方式,但它应该传达了这个想法
我也很难找到有关此的信息,最终购买了一个像@robotHamster 建议的那样的课程,但我没有发现该解决方案很优雅。
你可以做的是直接向其他频道发送消息,而不是向其他群组发送消息(并让群组发送到其中的所有频道)。
更多信息在这里: https://channels.readthedocs.io/en/latest/topics/channel_layers.html#synchronous-functions
基本上,您将使用 channel_layer.send
。
channel_layer.group_send