首页 > 解决方案 > 如何将javascript对象存储在数据库中

问题描述

我是 django/react 的新手,我正在尝试通过创建战舰游戏来学习。我已经使用 React 编写了一些前端,但我想通过 django 将我目前作为 javascript 对象拥有的游戏状态存储在我的数据库中,以便两个玩家共享。我的状态对象有两个属性:一个代表棋盘状态和历史的数组数组对象,以及一个如下所示的 Ship 对象数组。

class Game extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            history: [{ squares: Array(9).fill(null) }],
            ships: [new Ship(14, "N"), new Ship(37, "E"), new Ship(84, "S")]
        };
    }
//...
}

我想我可能必须序列化状态对象才能做到这一点,但不知道如何去做。我见过的大多数问题/答案都在谈论序列化模型,但我认为这不是我需要的。我想序列化一个自定义对象,将其存储在数据库中,然后在将其发送到玩家的浏览器时对其进行反序列化。

标签: djangoreactjs

解决方案


有一些方法可以用 Django 存储 JSON 对象,如下所示:

from django.db import models
from django_mysql.models import JSONField

class Example(models.Model):
    example = JSONField(...)

在这里阅读更多。

但是,根据我的经验,我发现通过 aTextField或类似方法将 JSON 作为字符串存储在数据库中更容易,然后在需要时解析 JSON。这是一些伪代码:

# models.py

from django.db import models

class Example(models.Model):
    json_example = models.TextField(...)
# where the model is used, perhaps views.py

import json
from .models import Example

def my_view(request):
    my_example = Example.objects.get(...)
    my_json = json.loads(my_example.json_example)
    ...

推荐阅读