[4]장고 채널스(django channels) json 데이타 전송

Computer 비관심/Django|2017. 2. 18. 00:01
반응형

콘슈머에 json과 parse를 임포트 한다. 지금까지 text: message.content['text'] 로 돌려보냈는데 이번에는 text: json.dumps()를 사용하여 데이타를 브라우저에 json 형태로 보낸다. 영문 튜로리얼과 다르게 우리는 한국말을 사용하기 때문에 , ensure_ascii=False를 붙여주어 한글이 아스키코드로 바뀌어서 나오는 것을 막았다.

# consumers.py

import json
from urllib import parse

from channels import Group
from channels.sessions import channel_session


@channel_session
def ws_add(message, room):
    query = parse.parse_qs(message['query_string'])
    if 'username' not in query:
        return
    Group('chat-%s' % room).add(message.reply_channel)
    message.channel_session['room'] = room
    message.channel_session['username'] = query['username'][0]


@channel_session
def ws_echo(message):
    if 'username' not in message.channel_session:
        return
    room = message.channel_session['room']
    Group('chat-%s' % room).send({
        'text': json.dumps({
            'message': message.content['text'],
            'username': message.channel_session['username']
        }, ensure_ascii=False),
    })

콘솔에 웹소켓을 ws://localhost:8000/chat/1?username=sean 이런 형식으로 보낸뒤 아래와 같은 방식으로 브라우저 마다 여러개를 만들면 서버에서 메시지와 함게 세션에 저장된 usernamed을 함께 보내는 것을 확인 할 수 있다.

ws = new WebSocket((window.location.protocol == 'http:' ? 'ws://' : 'wss://') +  window.location.host + '/chat/' + 1 + '?username=' + 'sean');
//메시지가 오면 콘솔
ws.onmessage = function(message) {
      console.log(message.data);
    }
ws.send('hi')
1번 브라우저에서는 션이라고 만들었고 2번째 브라우저에서는 jone이라고 만들어서 메시지를 보낸 것을 확인 할 수 있다.


댓글()