Прочитанные и непрочитанные сообщения каналов Django
Я новичок в каналах django и пытаюсь построить приложение чата, я встретил некоторые проблемы в разработке read
и unread
функционирования, я надеюсь, что вы можете дать мне руку.
потребитель чата имеет очень простую структуру:
имя комнаты chat_1 предназначено для пользователя 1 для получения сообщений. кто бы ни подключился к ней, он может отправить сообщение пользователю 1, а метод сохранения в базе данных определен в потребителе, который принимает self.scope["user"]
в качестве отправителя и self.room_name
в качестве получателя, чтобы создать запись сообщения и пометить его как непрочитанное
У пользователя есть список друзей, при нажатии на имя, загружаются все сообщения, при этом все сообщения помечаются как прочитанные, я сделал это с помощью ajax функции, а не ws, т.к. пользователь кликает в сторону от цели разговора.
но вот один сценарий, где два пользователя находятся на странице друг друга и не кликают никого другого, мне нужно инициировать сообщение с read already при создании в базе данных.
Допустим, user_1
разговаривает с user_22
, user_1
подключается ко многим ws, но в данный момент стоит перед ws_22
, чтобы отправить сообщение user_22
. В методе получения, как я могу определить, находится ли user_22
в данный момент перед ws_1, который ожидает сообщения?
Говоря "сталкиваться", я не имею в виду подключение к веб-сокету, пользователь подключается ко многим ws одновременно, соответствующим его друзьям (у каждого друга есть уникальный ws для получения сообщения), я имею в виду перейти на страницу чата пузырьков с целевым пользователем, нажав на аватар пользователя
если вас смутило или напрягло какое-либо мое выражение, извините за беспокойство. однако, если у вас есть какие-либо предложения или что-либо, на что мне следует обратить внимание, я буду более чем благодарен.
chat consumer
message model
class Message(models.Model):
sender = models.ForeignKey(ChatProfile, on_delete=models.CASCADE, related_name='sent')
receiver = models.ForeignKey(ChatProfile, on_delete=models.CASCADE, related_name='received')
text = models.TextField(blank=1, null=1)
image = models.FileField(upload_to='chatprofile_image', blank=1, null=1)
file = models.FileField(upload_to='chatprofile_file', blank=1, null=1)
audio = models.BinaryField(blank=1, null=1)
createTime = models.DateTimeField(default=now)
read = models.BooleanField(default=False)
style = models.CharField(max_length=50, blank=1, null=1)
chat profile model
class ChatProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='chatProfile')
# mutual added relationship
friends = models.ManyToManyField(User, blank=1, related_name='friends')
online = models.BooleanField(default=False)