oTree中的Django静止框架

问题描述 投票:0回答:1

任何人都对将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控制台中显示接收的字符串。

Backend Image

Frontend Image

django django-models websocket django-channels otree
1个回答
0
投票

[收到消息时,您应该使用JSON.parse,而不是JSON.stringify,这是相反的。无论如何,最好使用实时页面:https://otree.readthedocs.io/en/latest/live.html

© www.soinside.com 2019 - 2024. All rights reserved.