"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 от здесь )