Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 存储作为JSON的数据的最RESTful的方式?_Django_Json_Post_Get_Request - Fatal编程技术网

Django 存储作为JSON的数据的最RESTful的方式?

Django 存储作为JSON的数据的最RESTful的方式?,django,json,post,get,request,Django,Json,Post,Get,Request,我有一个Django服务器,负责向控制器机器提供JSON格式的文件。我的服务器从POST请求中获取数据,并在GET请求中提供JSON文件。我想知道在服务器上创建此桥的最RESTful和最有效的方法是什么 我正在考虑为每个POST请求创建一个JSON模型并在数据库中存储实例,并将实例动态打包到JSON文件中,并在GET请求中提供服务。另一种方法是在POST请求中创建JSON文件,将它们保存在服务器上的文件夹中,并在GET请求中提供这些文件 哪条路更好?为什么?还是我没有找到一个完全更好的方法?为什

我有一个Django服务器,负责向控制器机器提供JSON格式的文件。我的服务器从POST请求中获取数据,并在GET请求中提供JSON文件。我想知道在服务器上创建此桥的最RESTful和最有效的方法是什么

我正在考虑为每个POST请求创建一个JSON模型并在数据库中存储实例,并将实例动态打包到JSON文件中,并在GET请求中提供服务。另一种方法是在POST请求中创建JSON文件,将它们保存在服务器上的文件夹中,并在GET请求中提供这些文件


哪条路更好?为什么?还是我没有找到一个完全更好的方法?

为什么要创建文件?您可以让Django视图返回JSON响应,而不是HTML响应:

import json

# in your view:
data = {}
return HttpResponse(json.dumps(data), mimetype="application/json")
根据可用数据动态构造JSON数据,如果JSON响应很大,则添加缓存,例如,或

这将防止在GET请求完成但还没有JSON文件时发生某些问题?。通过这种方式,您可以基于您拥有的数据生成JSON,或者返回带有错误消息的JSON。

我使用自然键和依赖项等来控制序列化的字段。我还尝试使用中间件来允许更深入的外键序列化。但是,我决定使用模板来呈现JSON响应

一些陷阱正在消失

我负责格式化JSON,使其更容易出错,比如缺少分号 我负责转义字符 序列化中的渲染速度比内置的慢? 一些优点是

即使底层模型发生了更改,我也可以控制序列化的内容 我可以在JSON文件上格式化多对多或外键关系,但我喜欢 TLDL;在我的例子中,我需要的JSON文件的格式是非常定制的。它在字典的列表中有一本字典。有些字段是迭代的,所以我需要在模板中使用循环来渲染它们。但是,该格式要求迭代对象中的一些字段封装在列表中,而不是字典中

这是我在考虑时遇到的一个障碍。通过使用类似

import simplejson as json
def encode_complex(obj):
    if isinstance(obj, complex):
        return [obj.real, obj.imag]
    raise TypeError(repr(o) + " is not JSON serializable")
json.dumps(2 + 1j, default=encode_complex)
'[2.0, 1.0]'
我可以设法返回迭代数据;然而,我需要迭代中的迭代和自定义对象类型列表或dict来封装某些迭代。最后,可能是因为缺乏知识或缺乏耐心,我决定在模板中完成


我觉得通过模板渲染并不是最具可伸缩性或“最聪明”的方式,可以用更好的方式吗?请随意证明我是对的还是错的。

是的,经过大量研究,我发现了对Django模型的支持。我将尝试用正确的外键构造我的类,并实现自然键方法。一旦我尝试了,我会回来给你一个答案。