python - Django 聊天应用程序
问题描述
我正在尝试使用 Django 频道制作聊天应用程序。我已经成功构建了一个一对一的聊天应用程序,但我没有将其扩展到多个一对一聊天的想法。就像,现在只有两个用户登录,但如果多个用户互相聊天怎么办。我被困在如何为此准备模型并将数据插入数据库中。因此,如果有人可以提供帮助,我将不胜感激。
模型.py
class Chat(models.Model):
room = models.CharField(max_length = 255, null = True)
user = models.ForeignKey(User, on_delete = models.SET_NULL, null = True)
message = models.TextField()
time = models.DateTimeField(auto_now_add = True, null = True)
def __str__(self):
return self.user.username
视图.py
def student_messages(request, pk):
student = Student.objects.get(id = pk)
chat = Chat.objects.filter(room = request.user)
if request.is_ajax():
print(request.POST.get('chat'))
Chat.objects.create(user = student.user, message = request.POST.get('chat'), room = request.user)
return render(request, "main/student_messages.html", {"student": student, "chat": chat})
def instructor_messages(request, pk):
instructor = Instructor.objects.get(id = pk)
chat = Chat.objects.filter(room = request.user)
notify = InstructorCourseNotification.objects.filter(instructor = instructor).order_by('-id')[:3]
if request.is_ajax():
print(request.POST.get('chat'))
Chat.objects.create(user = instructor.user, message = request.POST.get('chat'), room = request.user)
return render(request, "main/instructor_messages.html", {"instructor": instructor, "chat": chat, "notify": notify})
消费者.py
class chatConsumer(AsyncJsonWebsocketConsumer):
async def connect(self):
await self.accept()
await self.channel_layer.group_add("chat", self.channel_name)
print(f"{self.channel_name}")
async def disconnect(self, code):
await self.channel_layer.group_discard("chat", self.channel_name)
print(f"removed {self.channel_name}")
async def user_chat(self, event):
await self.send_json(event)
print(f"{event}")
信号.py
@receiver(post_save, sender=Chat)
def chat_notification(sender, instance, created, **kwargs):
if created:
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
"chat",
{
"type": "user.chat",
"event": "New Chat",
"user": instance.user.id,
"message": instance.message,
"time": json.dumps(instance.time.strftime("%d"), cls = DjangoJSONEncoder)
})
问题是在当前的实现中,我也无法成功保存整个聊天记录。仅保存各个用户发送的消息。
解决方案
推荐阅读
- database - logstash error - database File does not exist or cannot be opened
- python -
我收到此错误 <bound method NDFrame.head of . 它没有正确显示我的数据框,我该怎么办?我的代码是基本的,这里是:
import pandas as pd df = pd.read_csv("/Users/shloak/Desktop/Pandas/
- android - 在 xamarin Forms Android 中访问被拒绝的 PDF 文件下载问题
- java - 如何将数据插入到 id = ...的现有列?
- javascript - 当鼠标在Javascript中悬停/单击它们时,如何选择列表中的特定列表项并通过属性添加一行
- ios - UILongPressGestureRecognizer 接受灵活的触摸量
- php - 使用邮件功能从php发送电子邮件
- python - 编辑外键引用的值时出现 Django IntegrityError
- spring-boot - 将 Spring-Actuator 与 ObjectDB 结合使用
- codeigniter-4 - 手动安装 CodeIgniter 4 问题