Django рамка для отдыха в oTree - PullRequest
0 голосов
/ 22 апреля 2020

Есть ли у кого-нибудь опыт применения Django Rest Framework в проекте oTree. Я хочу сериализовать запрос сохраненных сообщений чата, сохраненных из приложения чата, и отправить их как JSON в веб-сокет, чтобы они могли отображаться в веб-интерфейсе. Когда я сериализуюсь с функцией 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]

consumer.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

1 Ответ

0 голосов
/ 25 апреля 2020

Когда вы получаете сообщение, вы должны использовать JSON .parse, а не JSON .stringify, что является противоположностью. В любом случае, лучше использовать Live Pages: https://otree.readthedocs.io/en/latest/live.html

...