oTree 中的 Django 休息框架

Posted

技术标签:

【中文标题】oTree 中的 Django 休息框架【英文标题】:Django Rest Frame in oTree 【发布时间】:2020-04-22 06:57:36 【问题描述】:

有没有人有将 Django Rest 框架应用于 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

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于oTree 中的 Django 休息框架的主要内容,如果未能解决你的问题,请参考以下文章

Django 和 Django 休息框架

Django 休息框架问题

Django 休息框架。更新嵌套对象

Django 测试休息框架:APIRequestFactory vs APIClient

markdown django休息框架过滤器

无法登录 Angular2 / Django 休息框架