我有一个标准的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)
...
Run Code Online (Sandbox Code Playgroud)
renderers.py
class ReportCSVRenderer(CSVStreamingRenderer):
header = ['count']
Run Code Online (Sandbox Code Playgroud)
serializers.py
class ReportSerializer(serializers.ModelSerializer):
count = fields.IntegerField()
class Meta:
model = Report
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
注意:必须注释或更改某些内容.
谢谢
我有几个画布相互重叠,合并为一个作为数据 URI。一切正常,我可以将合成图像显示在页面上,但我需要的另一个功能是创建 URI,然后共享到 Facebook。我想尝试在不发送到服务器的情况下执行此操作并在客户端完成所有操作。
该代码对于解决问题不是必需的,但如果您想查看它
<ul class="button-group even-2">
<li><span id='merge-canvas' class="button expand">Save Image</span></li>
<li><span id='share-facebook' class="button expand facebook" >Share</span></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
javascript 看起来像这样。
// DROPBOX AND FILE READER
function noopHandler(evt) {
evt.stopPropagation();
evt.preventDefault();
}
function drop(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files;
var count = files.length;
// Only call the handler if 1 or more files was dropped.
if (count > 0) {
}
handleFiles(files);
}
function handleFiles(files) {
var file = files[0];
document.getElementById("droplabel").innerHTML = "Processing " + file.name;
var …Run Code Online (Sandbox Code Playgroud)