Нужна помощь в настройке django-filetransfers - PullRequest
3 голосов
/ 19 января 2012

Моя настройка: Django 1.3 / Python 2.7.2 / Win Server 2008 R2 / IIS 7.5 / MS SQL Server 2008 R2.Я занимаюсь разработкой приложения, основной функцией которого является анализ загруженных файлов и создание отчета.

Чтение документации для django-filetransfers , я считаю, что это решение проблемы, которую яНекоторое время мы пытались решить проблему (т. е. загрузка файлов на основе форм полностью блокирует все ответы Django, пока передача файла не закончится ... ужас даже для файлов среднего размера).

Документация говорит о загрузке по трубопроводу в S3 или Blobstore, и это может быть тем, чем я в конечном итоге буду заниматься, но во время разработки я подумал, что, возможно, я мог бы просто установить свой собственный «S3 для бедняков» на сервере, который я контролирую.По сути, это просто еще один экземпляр Django (или, возможно, простое приложение ASP.NET), единственной целью которого является получение загруженных файлов.Это звучит так, как если бы это было возможно с django-filetransfers и решило бы проблему отзывчивости Django (???).

Но я упускаю некоторые кусочки понимания того, как это работает в целом, а также некоторые особенности,Может быть, поможет пример: допустим, у меня есть MyMainDjangoServer и MyFileUploadServer.MyMainDjangoServer будет обслуживать представления, включая форму загрузки.MyFileUploadServer будет «ловить» загруженные файлы.Мои вопросы / путаница заключаются в следующем:

  • Моя форма загрузки будет содержать дополнительные поля, помимо файлов (-ов) ... правильно ли я понимаю, что MyMainDjangoServer каким-то образом все еще получит эти данные формыминус данные файла (в основном: request.POST), и данные файла перенаправляются в MyFileUploadServer?Как это работает?Будет ли MyMainDjangoServer по-прежнему блокироваться во время загрузки в MyFileUploadServer?

  • Я предполагаю, что для MyFileUploadServer мне потребуется представление / URL, который обрабатывает запрос формы и высасывает запрос.ФАЙЛЫ ДАННЫЕ.Что еще должно произойти?Что происходит с остальными данными формы?

  • Как мне настроить файл settings.py для этого сценария?Примеры django-filetransfers, похоже, предполагают либо S3, либо GAE / Blobstore, но, возможно, мне не хватает некоторых основ.

Любые советы / ответы приветствуются ... это сбивает с толку и расстраивает областьДжанго для меня.

1 Ответ

2 голосов
/ 28 августа 2012

"MyMainDjangoServer каким-то образом все равно получит эти данные формы, за исключением данных файла (в основном: request.POST), и данные файла будут перенаправлены на MyFileUploadServer? Как это работает? Будет ли MyMainDjangoServer по-прежнему блокироваться во время загрузкиto MyFileUploadServer? "

Я знаю, что Blobstore GAE, предположительно S3, справляется с этим, требуя от него success_url.В вашем случае это будет URL-адрес на MyMainDjangoServer, когда представление получения файлов на MyFileUploadServer будет повторно публиковать данные не-файловых форм после завершения загрузки.

Посмотрите на create_upload_url метод здесь: https://developers.google.com/appengine/docs/python/blobstore/functions

Вам необходимо воссоздать эту функцию в некоторой форме (см. Ниже).

"Как мне настроить файл settings.py для этого сценария? "

Вам необходимо создать свой собственный бэкэнд для передачи файлов, который будет представлять собой файл с функцией prepare_upload.

Вы можете увидеть один из App Engine здесь:
https://github.com/django-nonrel/djangoappengine/blob/develop/storage.py

Метод prepare_upload просто оборачивает метод GAE create_upload_url, упомянутый выше.

Таким образом, в вашем файле settings.py у вас будет что-то вроде:

PREPARE_UPLOAD_BACKEND = 'myapp.filetransfers_backend.prepare_upload'

(то есть путь импорта к вашей функции prepare_upload)

В остальном вы можете начать с уже предоставленных файловыми передачами:

SERVE_FILE_BACKEND = 'filetransfers.backends.url.serve_file'
# if you need it:
PUBLIC_DOWNLOAD_URL_BACKEND = 'filetransfers.backends.url.public_download_url'

Они зависят отfile_field.url устанавливается (см. Django docs ) и поскольку ваши файлы будут находиться на отдельном сервере, вам, вероятно, нужнохорошо в написание пользовательского хранилища для Django тоже.(случаи S3 и GAE предполагают, что вы используете пользовательские бэкэнды хранилища Django от здесь )

...