0

有没有人有将 Django Rest 框架应用于 oTree 项目的经验。我想序列化从聊天应用程序保存的已保存聊天消息的查询,并将它们作为 JSON 发送到 websocket,以便它们可以显示在前端。当我用 from django.core.serializers import serialize函数序列化并在前端解析它时,我没有得到理想的 JSON 对象,而只是字符串中的 JSON。

模型.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]

消费者.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
                }
            }
        )

播放.html

socket.onmessage = event => {
            let data = JSON.parse(event.data).message;
            let db = JSON.stringify(event.data).message.db;
            console.log(db);
};

我添加了两张图片,一张在后端显示查询的 json,在前端的 javascript 控制台中显示接收到的字符串。

后端图像

前端图像

4

1 回答 1

0

当你收到一条消息时,你应该使用 JSON.parse,而不是 JSON.stringify,它是相反的。无论如何,最好使用 Live Pages:https ://otree.readthedocs.io/en/latest/live.html

于 2020-04-25T07:05:14.587 回答