2015-02-07 115 views
2

我一直在使用django-import-export來爲用戶提供數據的CSV/XLS導出功能,但隨着數據集變大,我遇到了服務器超時。用django-import-export流式傳輸響應

我知道可以使用StreamingHttpResponse,但是從我所見過的情況來看,這是通過編寫自己的CSV編寫器函數輸出您的數據來完成的,至少在最初的時候,這並不會影響我的工作,目前的做法。

當您使用django-import-export模型資源生成文件時,是否可以傳輸響應?

這是我目前實施的那種代碼,標準爲HttpResponse;

class ExportConsolePlacesView(ClientPlacesView, View): 
    """ 
    Export view for all places, either incomplete or complete. 
    """ 
    model = Place 
    http_method_names = ['get', ] 

    def get(self, request, *args, **kwargs): 
     self.object_list = self.get_queryset() 
     console_name = self.console.name.replace(' ', '_') 

     if kwargs['query'] == u'complete': 
      dataset = PlaceResource().export(
       Place.objects.complete_entrants_for_console(self.console) 
      ) 
      filename = '{}_complete_entrants'.format(console_name).lower() 

     elif kwargs['query'] == u'incomplete': 
      dataset = PlaceResource().export(
       Place.objects.incomplete_entrants_for_console(self.console) 
      ) 
      filename = '{}_incomplete_entrants'.format(console_name).lower() 

     export_type = kwargs['format'] 
     _dataset_methods = { 
      'csv': dataset.csv, 
      'xls': dataset.xls 
     } 
     response = HttpResponse(
      _dataset_methods[export_type], content_type=export_type 
     ) 
     response[ 
      'Content-Disposition'] = 'attachment; filename={fn}.{ext}'.format(
       fn=filename, 
       ext=export_type 
      ) 

     return response 

回答

1

我質疑這與django-import-export開發商,他認爲,由於使用tablib應用將不可能流的響應,由於道路tablib的行爲。

我認爲不可能從django-import-export使用的tablib創建導出流。

https://github.com/bmihelac/django-import-export/issues/206

+0

所以基本上,如果你有成千上萬行的,你不能使用它。遊民。 – s29 2018-03-01 01:25:36