horozov86

consumers.py

Sep 30th, 2025
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.75 KB | None | 0 0
  1. import json
  2. from channels.generic.websocket import AsyncWebsocketConsumer
  3. from .models import Message
  4. from django.contrib.auth.models import User
  5.  
  6. class ChatConsumer(AsyncWebsocketConsumer):
  7.     async def connect(self):
  8.         self.room_name = self.scope['url_route']['kwargs']['room_name']
  9.         self.room_group_name = f'chat_{self.room_name}'
  10.  
  11.         # Присъединяване към групата
  12.         await self.channel_layer.group_add(
  13.             self.room_group_name,
  14.             self.channel_name
  15.         )
  16.  
  17.         await self.accept()
  18.  
  19.     async def disconnect(self, close_code):
  20.         # Напускане на групата
  21.         await self.channel_layer.group_discard(
  22.             self.room_group_name,
  23.             self.channel_name
  24.         )
  25.  
  26.     async def receive(self, text_data):
  27.         text_data_json = json.loads(text_data)
  28.         message = text_data_json['message']
  29.  
  30.         # Записване на съобщението в базата
  31.         user = self.scope["user"]
  32.         if user.is_authenticated:
  33.             Message.objects.create(user=user, room=self.room_name, content=message)
  34.  
  35.         # Изпращане на съобщението на всички в групата
  36.         await self.channel_layer.group_send(
  37.             self.room_group_name,
  38.             {
  39.                 'type': 'chat_message',
  40.                 'message': message,
  41.                 'username': user.username if user.is_authenticated else 'Anonymous'
  42.             }
  43.         )
  44.  
  45.     async def chat_message(self, event):
  46.         message = event['message']
  47.         username = event['username']
  48.  
  49.         await self.send(text_data=json.dumps({
  50.             'message': message,
  51.             'username': username
  52.         }))
  53.  
Advertisement
Add Comment
Please, Sign In to add comment