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