2017-08-31 10 views
1

Django documentationに従ってWebSocketを使用してDjangoをバックアップしようとしました。私はメッセージを受信して​​PostgreSQLデータベースに保存し、同じユーザーに返信したいと思います。現時点では、メッセージは受信されたものと同じであってもよい。私は以下のような方法でそれをしようが、私は得る:PostgreSQLデータベースを使用してWebSocketに基づいて簡単なDjangoチャットを作成するにはどうすればよいですか?

django_1 | 2017-08-31 08:30:52,050 - ERROR - worker - Error processing message with consumer backend.consumers.msg_consumer: 
django_1 | Traceback (most recent call last): 
django_1 | File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 119, in run 
django_1 |  consumer(message, **kwargs) 
django_1 | File "/code/backend/consumers.py", line 11, in msg_consumer 
django_1 |  message=message.content['message'], 
django_1 | KeyError: 'message' 

routing.py:

from channels.routing import route 
from backend.consumers import ws_connect, ws_receive, ws_disconnect, msg_consumer 

channel_routing = [ 
    route("websocket.connect", ws_connect), 
    route("websocket.receive", ws_receive), 
    route("websocket.disconnect", ws_disconnect), 
    route("chat", msg_consumer), 
] 

models.py:

from django.db import models 

class Message(models.Model): 
    message = models.CharField(max_length=200) 

がconsumers.py:

from channels import Group 
from .models import Message 
from channels import Channel 
import json 


# Connected to chat-messages 
def msg_consumer(message): 
    # Save to model 
    Message.objects.create(
     data=json.loads(message['text']), 
     message = data['message'] 
    ) 
    # Broadcast to listening sockets 
    Group("chat").send({ 
     "text": message.content['message'], 
    }) 

# Connected to websocket.connect 
def ws_connect(message): 
    # Accept the connection 
    message.reply_channel.send({"accept": True}) 
    # Add to the chat group 
    Group("chat").add(message.reply_channel) 

# Connected to websocket.receive 
def ws_receive(message): 
    Channel("chat").send({ 
     "text": message.content['text'], 
    }) 
    print(message.content['text']) 

# Connected to websocket.disconnect 
def ws_disconnect(message): 
    Group("chat").discard(message.reply_channel) 

変更しました:

Message.objects.create(
    message=message.content['message'], 
) 

申し訳ありません

Message.objects.create(
    data=json.loads(message['text']), 
    message = data['message'] 
) 
+0

メッセージ['text']はどのメッセージが表示されますか – single430

+0

単純なStringを送信します。 – wahtdbogh

+0

メッセージを印刷、タイプ(メッセージ)多く試してくださいmessage.content ['text'] – single430

答えて

2

にこれを試してみてください:

from channels import Group 
from .models import Message 
from channels import Channel 


def msg_consumer(message): 
    text = message.content.get('text') 
    Message.objects.create(
     message=text, 
    ) 
    Group("chat").send({'text': text}) 


def ws_connect(message): 
    message.reply_channel.send({"accept": True}) 
    Group("chat").add(message.reply_channel) 


def ws_receive(message): 
    Channel("chat").send({ 
     "text": message.content['text'], 
    }) 


def ws_disconnect(message): 
    Group("chat").discard(message.reply_channel) 

更新ソリューション

+0

あなたの 'msg_consumer'では、更新された質問と同じエラーが表示されます:' django_1 | JSONDecodeError( "Expecting value"、s、err.value)をNoneから呼び出す django_1 | json.decoder.JSONDecodeError:期待値:行1列1(char 0) ' – wahtdbogh

+0

@Wahtdbogh、あなたの"メッセージ "変数に含まれているものを提供してください。 –

+0

'msg_consumer'で' print( "message" + message)を意味しますか? – wahtdbogh

0
def msg_consumer(message): 
    # Save to model 
    Message.objects.create(
     message = message.content['text'] 
    ) 
    # Broadcast to listening sockets 
    Group("chat").send({ 
     "text": message.content['text'], 
    }) 

あなたはこれで問題が解決しない場合、私は知らない、しようと、

+0

私の投稿を更新しました。 – wahtdbogh

関連する問題