2012-12-20 106 views
2

我已經使用django-rest-framework製作了一個簡單的JSON API,並且我希望能夠將這5個集合作爲一個包含集合的zipfile下載爲JSON文件。 (我的應用程序需要此數據的離線轉儲)。Django-rest-framework json dump

我正在考慮編寫一個視圖,例如/download/,它將所有我的MyModelList.as_view()的輸出捆綁在一個zip中並提供。

這樣做的最好方法是什麼?我可以使用urllib/Requests直接查詢我的API,但似乎很長一段時間,以調用整個http堆棧...

非常感謝!

+0

'MyModelList.as_view()(請求,格式= 「JSON」)。rendered_content '似乎得到我想要的JSON,是最好的選擇,雖然 – 0atman

+0

任何工作的例子?謝謝 – cor

回答

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)來添加內容。

  • 當返回zip文件作爲django的答覆,不要忘記設置Content-Disposition頭如圖https://stackoverflow.com/a/909088/27401