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']
)
メッセージ['text']はどのメッセージが表示されますか – single430
単純なStringを送信します。 – wahtdbogh
メッセージを印刷、タイプ(メッセージ)多く試してくださいmessage.content ['text'] – single430