Создание файла из Django

#python #django #python-2.7

#python #django #python-2.7

Вопрос:

У меня есть пара файлов .xlsx, загруженных из формы на веб-сайте Django. По причинам, которые не стоит объяснять, мне нужно получить путь к файлу для этих файловых объектов, а не выполнять действия непосредственно над ними. Tl;dr: Мне пришлось бы потратить дни на переписывание тонны чужого кода.

Является ли следующий лучший способ сделать это:

  1. Сохранение объектов в виде файлов
  2. Получение путей к файлам вновь созданных файлов
  3. do_something()
  4. Удаление файлов

Спасибо.

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

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 это просто за вас. Зависит от того, что именно вам нужно сделать с этим файлом.