我需要将生成的文件下载作为Django REST Framework响应返回 . 我尝试了以下方法:
def retrieve(self, request, *args, **kwargs):
template = webodt.ODFTemplate('test.odt')
queryset = Pupils.objects.get(id=kwargs['pk'])
serializer = StudentSerializer(queryset)
context = dict(serializer.data)
document = template.render(Context(context))
doc = converter().convert(document, format='doc')
res = HttpResponse(
FileWrapper(doc),
content_type='application/msword'
)
res['Content-Disposition'] = u'attachment; filename="%s_%s.zip"' % (context[u'surname'], context[u'name'])
return res
但它返回一个msword文档为 json
.
如何让它开始作为文件下载?
3 回答
以下是直接从DRF返回文件下载的示例 . 诀窍是使用自定义渲染器,以便您可以直接从视图返回响应:
注意我使用自定义 endpoints
download
而不是默认 endpointsretrieve
,因为这样可以轻松地为此 endpoints 而不是整个视图覆盖渲染器 - 并且它往往对列表和细节有意义返回常规无论如何JSON . 如果要选择性地返回文件下载,可以向自定义渲染器添加更多逻辑 .我通过将文件保存在媒体文件夹中并将其链接发送到前端来解决了我的问题 .
并在我的前端处理这个(AngularJS SPA)
这可能对你有用:
对于FrontEnd代码,请参阅this