我有一个从Django生成的文件,我需要使用drf发送该文件作为对前端的响应?

时间:2019-04-08 05:59:13

标签: django python-3.x django-rest-framework

使用python我已经解析并存储了文件,现在我需要使用drf作为api视图将该文件发送到前端。

我可以发送文件作为json响应之类的响应吗?如果可以,怎么发送?

3 个答案:

答案 0 :(得分:0)

是的,但是与其他任何媒体一样,它将以JSON中的URL形式发送。为了将URL添加到您的响应中,只需serialize您的数据,然后将其作为response发送。然后,您可以使用任何使用的前端语言来操纵文件。

答案 1 :(得分:0)

取决于文件大小和文件类型,可以使用不同的技术来实现。

对于较大的文件,通常不建议使用Django服务。如果该资源不受访问保护,则可以将该文件用作媒体文件或静态文件,并让前端从那里检索它。如果受访问保护,通常的做法是将文件放在S3和send a generated signed URL之类的地方。

对于较小的有效负载,您只需读取文件内容并发送a file attachment response

答案 2 :(得分:0)

An example of sending a file using a HttpResponse (from django.http):

class ExportDataView(views.APIView):

    permission_classes = (permissions.IsAuthenticated, HasDashboardReadAccess)

    def get(self, request):
        # Read the data from your file (use with open(): or whatever else you need)
        file = <your_file>.read()
        # Specify the file content type (here it's an .xlsx)
        content_type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        response = HttpResponse(file, content_type=content_type)
        response['Content-Disposition'] = f'attachment; filename={<your file name>}'

        return response

Hope this helps!