#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 к вашему ответу, просто сериализуйте свои данные, а затем отправьте их в качестве ответа. Затем вы можете манипулировать файлом, используя любой язык интерфейса, который вы используете.