【问题标题】:How to use param from HTTP request to append a model in Django如何使用 HTTP 请求中的参数在 Django 中附加模型
【发布时间】:2019-07-27 00:44:36
【问题描述】:

我是 Django 新手,以及它如何与它的一些内部组件交互,所以如果这很明显,我提前道歉。我正在使用 html 画布和特定的 javascript 库 (fabric.js),以便可以将画布转换为 json 对象。我想使用 ajax 请求来发送该 json 对象,以便我可以将它附加到我的数据库中的模型。我该怎么做呢。

这里是 Javascript:

function postData(input) {
            $.ajax({
                type: "POST",
                url: window.location.href,
                data: { json: input },
                success: callbackFunc
            });
        }
let canvasBefore = JSON.stringify(canvas);
postData(canvasBefore);

我假设 django 有一个内置的方法来处理这样的请求。感谢您的帮助。 尼古拉斯

【问题讨论】:

    标签: javascript python ajax django django-views


    【解决方案1】:

    如果canvas 是实际的<canvas> 元素,您不能只使用JSON.stringify() 并期望保存图像:

    >>> c = document.createElement('canvas')
        <canvas>​
    >>> JSON.stringify(c)
        "{}"
    

    相反,您可能希望使用canvas.toDataURL() 来获得一个data: URL,它将画布的内容编码为 Base64 编码的 PNG 格式:

    >>> x = c.toDataURL()
        "data:image/png;base64,iVBORw0KGgoAAA..."
    

    这是一个可以保存到 Django 模型中的纯字符串,或者更好的是,在服务器端代码中解码回二进制 PNG,然后使用 FileField 甚至 ImageField 保存为文件。

    【讨论】:

    • 我不想将其保存为图像,我想保留 json 以便用户可以返回画布并继续编辑他们离开的画布。 fabric.js 的一个特点是可以从 json 加载。不过谢谢你的回答:)
    【解决方案2】:

    我认为最好的方法是使用Django Rest Framework,通过这个库,您可以创建强大的 API,该过程将通过以下方式:

    1. 创建Model
    2. 创建ModelSerializer(需要 DRF)
    3. 创建一个视图来处理请求,在这种情况下你可以使用CreateApiView 类。 (需要 DRF)
    4. 创建您的endpoint
    5. 使用它

    有很多方法可以为您的问题创建解决方案,这只是其中一种。希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-27
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 2020-01-14
      • 2012-07-30
      • 2016-12-14
      相关资源
      最近更新 更多