Django-rest-framework json转储

时间:2012-12-20 10:04:06

标签: django json zip django-rest-framework

我使用django-rest-framework制作了一个简单的JSON API,我希望能够将5个集合作为一个包含集合作为JSON文件的zipfile下载。 (我的应用程序需要这种脱机数据转储)。

我正在考虑编写一个视图,例如/download/,它将我所有MyModelList.as_view()的输出捆绑在一起并提供服务。

这样做的最佳方式是什么?我可以使用urllib / Requests直接查询我的API,但是看起来很长一段时间来调用整个http堆栈......

非常感谢!

1 个答案:

答案 0 :(得分:3)

你可以使用你提到的MyModelList.as_view()(request, format="json").rendered_content。根据您的设置,您也可以直接调用序列化程序,而不是完全通过模型。当然,这取决于您是否在视图中执行任何特殊操作,或者是否只传递序列化模型数据。

要压缩这些文件,请使用Python的zipfile module。有关其他提示,请参阅https://stackoverflow.com/a/9644831/27401https://stackoverflow.com/a/908293/27401。摘要:

  • 使用StringIO创建类似文件的对象(而不是临时文件)。

  • 在该StringIO上使用zipfile的.writestr('filename-in-zip.json', your_json_string)添加内容。

  • 将zipfile作为django响应返回时,请不要忘记设置https://stackoverflow.com/a/909088/27401

  • 中显示的Content-Disposition标题