Как загрузить файлы на модель Django, созданные на лету? - PullRequest
0 голосов
/ 19 февраля 2020

Вот пример:

Предположим, пользователь, скажем, «Avi» использует мое веб-приложение. Ави загружает файл (скажем, и .xls / .xlsx) в мое веб-приложение. Я использую django -хранилища для загрузки файлов в S3 или Azure. Проблема возникает, когда я создаю фрейм данных из загруженного файла. Когда я экспортирую фрейм данных, он не загружается, а экспортируется в местоположение проекта.

Текущее решение: я использую azure, boto3 api для преобразования фрейма данных в поток байтов, а затем загрузка в соответствующий контейнер или ведро s3.

Есть ли более простой способ пропустить вновь созданный кадр данных через сериализатор, чтобы он загружался в соответствующее местоположение?

1 Ответ

0 голосов
/ 20 февраля 2020

После некоторого копания и поиска по всему inte rnet. Я нашел лучшее решение для существующего. Я постараюсь записать подробный фрагмент! Использование SimpleUploadedFile , являющегося частью django .core.files.uploadedfile , решает большую часть проблемы и значительно облегчает чтение кода.

Вот фрагмент:

# Other imports
from django.core.files.uploadedfile import SimpleUploadedFile
import pandas as pd
import io

df = pd.DataFrame()
# Do something with dataframe
# After processing the dataframe do the following
output_stream = io.BytesIO()
df.to_excel(output_stream, index=False)
output_file = SimpleUploadedFile('sample.xlsx', output_stream.getvalue())
data = { 'record_type': 'OUTPUT_FILE', 'record':output_file }
record_serializer = RecordSerializer(data=data)
if record_serializer.is_valid():
    record_serializer.save()
    # Display data from the serializer/ Return serialized data
else:
    # Return an exception or error from the serializer

Дайте мне знать, если это работает для любого из вас, кто пробовал это. Кроме того, поскольку вы передаете файл в качестве параметра в serialzer, независимо от того, используете ли вы локальное хранилище по умолчанию или конфигурируете S3, Azure et c с помощью django -хранилищ, файл будет загружен в Ваше соответствующее местоположение без хлопот вызова API для загрузки файлов, созданных python / django время от времени.

...