У меня есть файл, сгенерированный из Django, мне нужно отправить этот файл в качестве ответа интерфейсу с использованием drf?

#django #python-3.x #django-rest-framework

#django #python-3.x #django-rest-framework

Вопрос:

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

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

Комментарии:

1. Прежде всего, это зависит от того, какой файл вы пытаетесь сериализовать / вернуть. Если вы пытаетесь вернуть какой-то медиафайл, его невозможно сериализовать должным образом

Ответ №1:

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

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

Ответ №2:

В зависимости от размера и типа файла существуют различные методы для достижения этого.

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

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

Комментарии:

1. Можете ли вы предоставить какие-либо примеры для ответа на вложение файла?

2. Проверьте ответ @henriquesalvaro 1

Ответ №3:

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