2015-02-07 79 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