我有一个标准的DRF Web应用程序,其中一个路由输出CSV数据。渲染整个CSV表示需要一些时间。数据集非常大,因此我想使用流式HTTP响应,以便客户端不会超时。但是,使用https://github.com/mjumbewu/django-rest-framework-csv/blob/2ff49cff4b81827f3f450fd7d56827c9671c5140/rest_framework_csv/renderers.py#L197提供的示例并不能完全实现这一点。数据仍然是一个大负载,而不是分块的,客户端最终等待接收到字节才会响应。结构类似于以下内容:
models.py
class Report(models.Model):
count = models.PostiveIntegerField(blank=True)
...
renderers.py
class ReportCSVRenderer(CSVStreamingRenderer):
header = ['count']
serializers.py
class ReportSerializer(serializers.ModelSerializer):
count = fields.IntegerField()
class Meta:
model = Report
views.py
class ReportCSVView(generics.Viewset, mixins.ListModelMixin):
def get_queryset(self):
return Report.objects.all()
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
data = ReportSerializer(queryset, many=True)
renderer = ReportCSVRenderer()
response = StreamingHttpResponse(renderer.render(data), content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="f.csv"'
return response
注意:必须注释或更改一些内容。
谢谢
chunk_size
可能会有所帮助。那么在哪里可以设置chunk_size
呢? - Will Keeling