Сохранить загрузки файла FileField где-нибудь кроме MEDIA_ROOT?

Много времен, некоторая быстрая задача подходит, который не является частью основного программного обеспечения, которое Вы разрабатываете. Иногда задача один прочь, т.е. сравните этот файл с базой данных и сообщите мне различия. Намного легче сделать текстовый парсинг в Perl/Ruby/Python, чем это находится в Java или C# (частично, потому что намного легче использовать регулярные выражения). Вероятно, потребуется намного меньше времени для парсинга текстового файла с помощью Perl/Ruby/Python (или возможно даже vbscript съеживается и затем загружает его в базу данных, чем это было бы для создания программы Java/C#, чтобы сделать это или сделать это вручную.

кроме того, из-за простоты, в которой большинство динамических языков анализирует текст, они являются великими для генерации кода. Уверенный Ваш заключительный проект должен быть в C#/Java/Transact SQL, но вместо того, чтобы вырезать и вставить 100 раз, найдя ошибки, и вырезание и вставление еще 100 раз его часто (но не всегда) легче только использовать генератор кода.

А, который недавний пример на работе, мы должны были получить данные из одной системы учета в нашу систему учета. Система имеет формат импорта, но старая система имела совершенно другой формат (зафиксированная ширина, хотя некоторые вещи должны были быть подобраны). Задача не состоит в том, чтобы создать программу для миграции данных много раз. Это должно пихнуть данные в нашу систему и затем поддержать его там продвижение. Таким образом даже при том, что мы - C# и магазин SQL Server, я использовал Python для преобразования данных в формат, который мог быть импортирован нашим приложением. В конечном счете не имеет значения, что я использовал Python, имеет значение, что данные находятся в системе. Мой босс был довольно впечатлен.

, Где я часто вижу, динамические языки, используемые для, тестируют. Намного легче создать программу Python/Perl/Ruby, чтобы связаться с веб-сервисом и бросить некоторые данные против него, чем это должно создать эквивалентную программу Java. Можно также использовать Python, чтобы удариться о программы командной строки, генерировать тонну мусора (но все еще допустимый) данные тестирования, и т.д. довольно легко.

другой вещью, в которой хорошо разбираются динамические языки, является генерация кода. Создание кода C#/C ++/Java. Некоторые примеры следуют:

первой задачей генерации кода, которую я часто вижу, являются люди, использующие динамические языки для поддержания констант в системе. Вместо руки, кодирующей набор перечислений, динамический язык может использоваться, чтобы довольно легко проанализировать текстовый файл и создать код Java/C# с перечислениями.

SQL является целой другой игрой с мячом, но часто Вы получаете лучшую производительность к вырезанным и вставленным 100 разам вместо того, чтобы пытаться сделать функцию (из-за кэширования планов выполнения или помещения сложной логики в функции, заставляющей Вас пойти строка строкой вместо в наборе). На самом деле довольно полезно использовать определение таблицы для создания определенных хранимых процедур автоматически.

всегда лучше добраться, покупают акции для генератора кода. Но даже если Вы не делаете, действительно ли это - больше забавы провести время, сокращая/вставляя, или действительно ли это - больше забавы создать сценарий Perl/Python/Ruby однажды и затем иметь, которые генерируют код? Если Вам требуются часы, чтобы вручить коду что-то кроме меньшего количества времени для создания генератора кода, то даже при использовании его, как только Вы сэкономили время и следовательно деньги. Если это берет Вас дольше для создания генератора кода, чем это берет для вручения кода однажды, но Вы знаете, что необходимо будет обновить код несколько раз, это может все еще иметь смысл. Если Вам требуются 2 часа для вручения кода, 4 часа, чтобы сделать генератор, но Вы знаете, что необходимо будет вручить коду эквивалентную работу еще 5 или 6 раз, чем, очевидно, лучше создать генератор.

Также некоторые вещи легче с динамическими языками, чем Java/C#/C/C ++. В особенности регулярные выражения приходят на ум. Если Вы начинаете использовать регулярные выражения в Perl и понимаете их значение, можно внезапно начать использовать библиотеку регулярных выражений Java, если Вы не имеете прежде. Если Вы имеете тогда может быть что-то еще.

я оставлю Вас с одним последним примером задачи, которая была бы большой для динамического языка. Мой коллега должен был взять каталог, полный файлов, и записать их к различному CD для различных клиентов. Было несколько клиентов, но много файлов и необходимо было посмотреть в них для наблюдения, каковы они были. Он сделал эту задачу вручную.... Программа Java/C# сэкономила бы время, но в течение одного времени и со всей разработкой наверху это не стоит того. Однако удар чего-то вместе в Perl/Python/Ruby, вероятно, стоил бы того. Он провел несколько часов, делая его. Это взяло бы меньше чем один для создания сценария Python для осмотра каждого файла, соответствие, какой клиент это переходит в, и затем перемещает файл в соответствующее место..... Снова, не часть стандартного задания. Но задача подошла как та прочь. Лучше сделать это самостоятельно, провести большее количество времени, чтобы заставить Java/C# сделать задачу или провести намного меньшее количество времени, делающее его в Python/Perl/Ruby. При использовании C или C++, точка еще более поразительна из-за дополнительных проблем программирования в C или C++ (указатели, никакой массив не ограничивает проверку, и т.д.).

5
задан John Mee 15 November 2009 в 01:46
поделиться

2 ответа

Есть несколько способов сделать это.

Во-первых, вы можете взглянуть на обработку загруженных файлов из документации Django. Если вы перечитаете его, то в основном вы можете обрабатывать загрузку файла в вашем представлении в той же части, где вы обрабатываете форму.

Другой вариант, и я думаю, что было бы лучше использовать пользовательская система хранения файлов . Вы можете сделать это очень просто, используя существующий в качестве основы, но просто изменив местоположение, а затем использовать его в качестве аргумента в вашем FileField. Например:

from django.core.files.storage import FileSystemStorage

my_store = FileSystemStorage(location='/some/other/dir')

class SomeModel(models.Model):
      file = models.FileField(storage=my_store)

Надеюсь, это поможет!

12
ответ дан 18 December 2019 в 13:15
поделиться

Учитывая, что единственное реальное использование MEDIA_ROOT во всем Django - это определение места хранения загруженных файлов, кажется, имеет смысл просто указать MEDIA_ROOT, где вы хотите загружать файлы, и затем используйте другую настройку для пути к вашим статическим ресурсам. Это подход, принятый Pinax и django-staticfiles , которые используют параметры STATIC_URL и STATIC_ROOT.

Обратите внимание, что даже страница документации по обслуживанию статических ресурсов в разработке больше не рекомендует использовать MEDIA_ROOT для этой цели, он демонстрирует использование вашей собственной настройки STATIC_DOC_ROOT.

2
ответ дан 18 December 2019 в 13:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: