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 休息框架的主要内容,如果未能解决你的问题,请参考以下文章