#python #django #python-2.7
#python #django #python-2.7
Вопрос:
У меня есть пара файлов .xlsx, загруженных из формы на веб-сайте Django. По причинам, которые не стоит объяснять, мне нужно получить путь к файлу для этих файловых объектов, а не выполнять действия непосредственно над ними. Tl;dr: Мне пришлось бы потратить дни на переписывание тонны чужого кода.
Является ли следующий лучший способ сделать это:
- Сохранение объектов в виде файлов
- Получение путей к файлам вновь созданных файлов
- do_something()
- Удаление файлов
Спасибо.
Комментарии:
1. Да, это звучит как подход, который вы должны принять. Вы могли бы написать сценарии, которые работают с загруженными файлами в качестве фоновых задач. Таким образом, ваше приложение будет просто загружать файлы в папку на сервере, а серверный скрипт (либо с использованием cron, либо из очереди задач) будет выполнять фактические операции в фоновом режиме
Ответ №1:
NamedTemporaryFile. Блок with выполняет всю очистку за вас, а именованная версия этого означает, что временный файл может быть передан по имени файла какому-либо другому процессу, если вам нужно зайти так далеко. Своего рода пример (обратите внимание, что это в основном кодируется на лету, поэтому здесь нет обещаний рабочего кода)
import tempfile
def handler(inmemory_fh):
with tempfile.NamedTemporaryFile() as f_out:
f_out.write(inmemory_fh.read()) # or something
subprocess.call(['/usr/bin/dosomething', f_out.name])
При выходе из withblock файл удаляется.
Что касается, это лучший способ? Enh, вы могли бы получить доступ к их коду загрузчика и сказать django записать его в файл, или вы можете нажать на настройки django для него (https://docs.djangoproject.com/en/1.10/ref/settings/#file-upload-settings ) и посмотрите, сделает ли django это просто за вас. Зависит от того, что именно вам нужно сделать с этим файлом.