我使用django-rest-framework制作了一个简单的JSON API,我希望能够将5个集合作为一个包含集合作为JSON文件的zipfile下载。 (我的应用程序需要这种脱机数据转储)。
我正在考虑编写一个视图,例如/download/
,它将我所有MyModelList.as_view()
的输出捆绑在一起并提供服务。
这样做的最佳方式是什么?我可以使用urllib / Requests直接查询我的API,但是看起来很长一段时间来调用整个http堆栈......
非常感谢!
答案 0 :(得分:3)
你可以使用你提到的MyModelList.as_view()(request, format="json").rendered_content
。根据您的设置,您也可以直接调用序列化程序,而不是完全通过模型。当然,这取决于您是否在视图中执行任何特殊操作,或者是否只传递序列化模型数据。
要压缩这些文件,请使用Python的zipfile module。有关其他提示,请参阅https://stackoverflow.com/a/9644831/27401和https://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
标题