Здравствуйте, мне нужна помощь с созданием чата. Использую Channels для обработки WebSockets. С документацией этого пакета я разобрался, мне нужна помощь во фронтенде. Backend:
# -*- coding: utf8 -*-
# consumers.py
import json
from channels import Group
def receive(message):
"""Принимает объекты JSON сообщения и отправляет их клиенту.
Все что в print'e - дебаг сообщения в консоли
"""
txt = message.content['text']
Group('chat').send({
'text': json.dumps({
'msg': txt
})
})
print 'Got WebSockets message ' + txt
def connect(message):
"""Подкдючает пользователя к группе "chat"
"""
message.reply_channel.send({"accept": True})
Group('chat').add(message.reply_channel)
print 'Connection established'
def disconnect(message):
"""Удаляет юзера из чата
"""
Group('chat').discard(message.reply_channel)
print 'User left'
Frontend:
//index.html
<div class="wrapper">
<div id="chat"></div>
<form id="form" action="">
<input id="msg" type="text" placeholder="type message">
<input id="submit" type="submit" value="send">
</form>
</div>
JavaScript
// main.js
$(function () {
var socket = new WebSocket('ws://' + window.location.host + '/chat/');
console.log("Connection established");
var chat = $('#chat');
var message = $('#msg').val();
socket.onmessage = function (e) {
chat.append(e.data)
};
socket.onopen = function (msg) {
msg = message;
socket.send(JSON.stringify(msg))
};
if (socket.readyState === WebSocket.OPEN) socket.onopen();
});
<div id="messages"></div>
<form>
<label for="text">Text:</label>
<textarea id="text" name="text" cols="50" rows="8"></textarea>
<button id="send">Send</button>
</form>
var messages = document.getElementById("messages");
var text = document.getElementById("text");
var button = document.getElementById("send");
var socket = new WebSocket("ws://" + window.location.host + "/chat/");
socket.onmessage = function(e) {
var message = document.createElement("p");
var data = JSON.parse(e.data);
message.innerHTML = data.user + ": " + data.text;
messages.appendChild(message);
}
button.addEventListener("click", function(event) {
event.preventDefault();
socket.send(text.value);
text.value = '';
});
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости