2

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

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

这样做的最佳方法是什么?我可以使用 urllib/Requests 直接查询我的 API,但调用整个 http 堆栈似乎还有很长的路要走……

非常感谢!

4

1 回答 1

3

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

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

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

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

  • 当将 zipfile 作为 django 响应返回时,不要忘记设置Content-Disposition标题,如https://stackoverflow.com/a/909088/27401所示

于 2012-12-21T10:43:11.097 回答