Проблемы с чатом в реальном времени в проекте django - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть django проект с комнатами, и я хочу создать чат в реальном времени для комнат с библиотекой каналов, этот чат работает с данными из url kinda example.com/room_name/person_name, но у меня есть комнаты, которые имеют статус c url (пример ниже), как настроить это для моего проекта. Я хочу показать request.user.username вместо person_name в URL, и я хочу использовать номер room_detail вместо room_name, который я должен вводить каждый раз

views.py
class RoomDetail(DetailView):
model = Room
template_name = 'rooms/room_detail.html'
context_object_name = 'room_detail'
slug_field = 'invite_url'
slug_url_kwarg = 'url'


consumers.py
class Consumer(WebsocketConsumer):
def connect(self):
    self.room_name=self.scope['url_route']['kwargs']['room_name']
    self.room_group_name='chat_%s' % self.room_name
    self.person_name=self.scope['url_route']['kwargs']['person_name']
    async_to_sync(self.channel_layer.group_add)(
        self.room_group_name,
        self.channel_name
    )
    async_to_sync(self.channel_layer.group_send)(
        self.room_group_name,
        {
            "type":"chat_message",
            "message":self.person_name+" Joined Chat"
        }
    )
    self.accept()
def disconnect(self, code):
    async_to_sync(self.channel_layer.group_send)(
        self.room_group_name,
        {
            "type":"chat_message",
            "message":self.person_name+" Left Chat"
        }
    )
    async_to_sync(self.channel_layer.group_discard)(
        self.room_group_name,
        self.channel_name
    )
def receive(self, text_data=None, bytes_data=None):
    text_data_json=json.loads(text_data)
    message=text_data_json['message']
    async_to_sync(self.channel_layer.group_send)(
        self.room_group_name,
        {
            'type':'chat_message',
            'message':self.user+" : "+message
        }
    )
def chat_message(self,event):
    message=event['message']
    self.send(text_data=json.dumps({
        'message':message
    }))

urls.py
path('rooms/<url>/', RoomDetail.as_view(), name='room_detail'),

1 Ответ

0 голосов
/ 05 апреля 2020

Я не уверен, я понимаю, что вы будете. но в случае, если вам нужно получить имя пользователя, вы можете просто использовать

self.scope['user'].username

вместо того, чтобы получать его из шаблона urls.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...