Group Chat in Django

时间:2017-03-22 18:51:46

标签: javascript python django websocket django-channels

I am tring to create group chat in Django with Channels. Here below you can see my code. After submit the message nothing happens. Also Log in empty. How to make code work?

routing.py:

channel_routing = [
    route('websocket.connect', ws_connect, path=r'^account/dashboard/projects/(?P<project_code>[0-9a-f-]+)/chat/$'),
    route("websocket.receive", ws_receive),
    route("websocket.disconnect", ws_disconnect),
]

consumers.py:

# Connected to websocket.connect
@channel_session
def ws_connect(message):
    query = parse.parse_qs(message['query_string'])
    if 'username' not in query:
        return
    room = message.content['path'].strip("/")
    Group('chat-%s' % room).add(message.reply_channel)
    message.channel_session['room'] = room
    message.channel_session['username'] = query['username'][0]
    message.reply_channel.send({"accept": True})


# Connected to websocket.receive
@channel_session
def ws_receive(message):
    if 'username' not in message.channel_session:
        return
    Group('chat-%s' % message.channel_session['room']).send({
        'text': json.dumps({
            'message': message.content['text'],
            'username': message.channel_session['username']
        })
    })


# Connected to websocket.disconnect
@channel_session
def ws_disconnect(message):
    Group("chat-%s" % message.channel_session['room']).discard(message.reply_channel)

template:

{% block content %}
    <h1>{{ room.code }}</h1>
    <div id="msgArea"></div>

    <div>
        <textarea name="message" id="message" cols="30" rows="10"></textarea>
    </div>

    <button id="btnSubmit">Submit</button>
{% endblock content %}

{% block script %}
    <script>
        $(document).ready(function(){
            var msgArea = $('#msgArea')
            var elementMessage = $('#message')
            var webSocket = new WebSocket('ws://' + window.location.host + '/account/dashboard/projects/(?P<{{ room.project_id }}>[0-9a-f-]+)/chat/');
            webSocket.onmessage = function(message) {
                var data = JSON.parse(message.data)
                msgArea.append('<p><strong>'+ data.username + '</strong>: ' + data.message + '</p>')
            }
            $('#btnSubmit').click(function(e) {
                webSocket.send(elementMessage.val())
            })
        })
    </script>
{% endblock script %}

0 个答案:

没有答案