任何人都对将Django Rest Framework应用于oTree项目有经验。我想序列化从聊天应用程序保存的已保存聊天消息的查询,并将它们作为JSON发送到websocket,以便它们可以显示在前端。当我序列化from django.core.serializers import serialize
函数并在前端解析它,但我没有得到理想的JSON对象,而只是字符串中的JSON。
models.py
class Message(models.Model):
content = models.TextField()
timestamp = django_models.DateTimeField(auto_now=True)
player = models.ForeignKey('Player', on_delete=models.CASCADE, null=True)
def last_15_messages(self):
return Message.objects.order_by('-timestamp').all()[:15]
consumers.py
async def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
messages_from_db = serialize('json', Message.last_15_messages(self))
messages_from_db_json = json.dumps({
'messages_from_db': messages_from_db
})
# Send message to room group
await self.channel_layer.group_send(
self.room_name,
{
'type': 'chat_message',
"message": {
"chat_message": message,
"db": messages_from_db_json
}
}
)
play.html
socket.onmessage = event => {
let data = JSON.parse(event.data).message;
let db = JSON.stringify(event.data).message.db;
console.log(db);
};
我添加了两个图像,一个图像在后端显示查询的json,在前端的JavaScript控制台中显示接收的字符串。
[收到消息时,您应该使用JSON.parse,而不是JSON.stringify,这是相反的。无论如何,最好使用实时页面:https://otree.readthedocs.io/en/latest/live.html