Используя python, я проанализировал и сохранил файл, теперь мне нужно отправить этот файл на мой внешний интерфейс, используя drf в качестве представления API.
Могу ли я отправить файл в качестве ответа, такого как ответ json? Если да, то как его отправить?
Да, но, как и любой другой медиафайл, он будет отправлен в виде URL-адреса в формате JSON. Чтобы добавить URL-адрес в свой ответ, просто сериализовать свои данные, а затем отправьте их как отклик. Затем вы можете манипулировать файлом, используя любой язык интерфейса, который вы используете.
В зависимости от размера файла и типа файла для этого существуют разные методы.
Для больших файлов обычно не рекомендуется использовать Django для их обслуживания. Если ресурс не защищен от доступа, я бы использовал файл как медиафайл или статический файл и позволил интерфейсу получить его оттуда. Если доступ защищен, обычной практикой является размещение файла где-нибудь, например, в S3 и отправить сгенерированный подписанный URL.
Для небольших полезных нагрузок вы можете просто прочитать содержимое файла и отправить ответ на вложение файла.
Можете ли вы привести какие-либо примеры ответа на вложение файла?
Проверьте ответ @henriquesalvaro +1
Пример отправки файла с помощью 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
Надеюсь это поможет!
Прежде всего, это зависит от того, какой файл вы пытаетесь сериализовать/вернуть. Если вы пытаетесь вернуть какой-либо медиафайл, его невозможно правильно сериализовать.