Django rest framework返回fi

2024-05-14 21:52:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我的视图中有以下视图.py-

class FilterView(generics.ListAPIView):
    model = cdx_composites_csv

    def get(self, request, format=None):
        vendor = self.request.GET.get('vendor')
        filename = self.request.GET.get('filename')
        tablename = filename.replace(".","_")
        model = get_model(vendor, tablename)
        filedate = self.request.GET.get('filedate')        
        snippets = model.objects.using('markitdb').filter(Date__contains=filedate)
        serializer = cdx_compositesSerializer(snippets, many=True)
        if format == 'raw':
            zip_file = open('C:\temp\core\files\CDX_COMPOSITES_20140626.zip', 'rb')
            response = HttpResponse(zip_file, content_type='application/force-download')
            response['Content-Disposition'] = 'attachment; filename="%s"' % 'CDX_COMPOSITES_20140626.zip'
            return response

        else:
            return Response(serializer.data)

它对xml、json、csv非常有用,但当我尝试使用raw时,它不会返回文件,而是给出“detail”:“not found”“为什么会发生这种情况?”?

我点击的网址如下-

工作的json示例-

http://dt-rpittom:8000/testfilter/?vendor=markit&filename=cdx_composites.csv&filedate=2014-06-26&format=json

这将返回一个zip文件供下载。

http://dt-rpittom:8000/testfilter/?vendor=markit&filename=cdx_composites.csv&filedate=2014-06-26&format=raw


Tags: csvselfformatgetrawmodelresponserequest
2条回答

我不知道为什么我要这么做-可能是Django Rest框架内部不允许将自定义方法放入格式的东西?

我只是把它改成了-

if fileformat == 'raw':
    zip_file = open('C:\temp\core\files\CDX_COMPOSITES_20140626.zip', 'rb')
    response = HttpResponse(FileWrapper(zip_file), content_type='application/zip')
    response['Content-Disposition'] = 'attachment; filename="%s"' % 'CDX_COMPOSITES_20140626.zip'
    return response

然后在我的URL中点击新值,它就可以正常工作了。我很想知道为什么我不能用格式来提供文件。

尝试使用FileWrapper

from django.core.servers.basehttp import FileWrapper

...

if format == 'raw':
    zip_file = open('C:\temp\core\files\CDX_COMPOSITES_20140626.zip', 'rb')
    response = HttpResponse(FileWrapper(zip_file), content_type='application/zip')
    response['Content-Disposition'] = 'attachment; filename="%s"' % 'CDX_COMPOSITES_20140626.zip'
    return response
...

另外,我将使用^{}而不是application/force-download

相关问题 更多 >

    热门问题