У меня есть файл, сгенерированный из Django, мне нужно отправить этот файл в ответ на интерфейс, используя drf? - PullRequest
0 голосов
/ 08 апреля 2019

Используя python, я проанализировал файл и сохранил его, теперь мне нужно отправить этот файл моему внешнему интерфейсу, используя drf как представление API.

Могу ли я отправить файл в качестве ответа, например, ответ json? Если так, то как это отправить?

Ответы [ 3 ]

0 голосов
/ 08 апреля 2019

В зависимости от размера файла и типа файла для этого есть разные методы.

Для больших файлов обычно не рекомендуется использовать Django для их обслуживания.Если ресурс не защищен от доступа, я бы использовал файл в качестве медиа-файла или статического файла и позволил бы переднему концу извлекать его оттуда.Если он защищен от доступа, обычной практикой является размещение файла где-то вроде S3 и , отправка сгенерированного подписанного URL .

. Для небольших полезных нагрузок вы можете просто прочитать содержимое файла и отправить файлответ вложения .

0 голосов
/ 08 апреля 2019

Пример отправки файла с использованием HttpResponse (из 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

Надеюсь, это поможет!

0 голосов
/ 08 апреля 2019

Да, но, как и любой другой носитель, он будет отправлен в виде URL в формате JSON.Чтобы добавить URL к вашему ответу, просто сериализуйте ваши данные, а затем отправьте его как ответ .Затем вы можете манипулировать файлом, используя любой язык интерфейса, который вы используете.

...