/ / Django Завантаження файлів обробника файлів - django, upload

Помилки обробника завантажень файлів Django - django, upload

У Джанго я хочу припинити завантаження будь-якого файлуНе закінчайте в моєму призначеному продовженні, як тільки вони отримали. Для цього я визначаю користувальницький обробник завантажень і записую новий файл, щоб виглядати приблизно так:

def new_file(self, field_name, file_name, content_type, content_length, charset=None):
basename, extension = os.path.splitext(file_name)
if extension != ".txt":
raise StopUpload(True) # Error: Only .txt files are accepted

Це чудово працює для зупинки завантаження, але цетакож очищає запит. FILES. Тепер, коли моя точка зору отримує запит, вона не може сказати, чи обробник завантаження викликав відсутність файлу, і я не можу відобразити корисне повідомлення користувачеві.

Чи існує спосіб поширення повідомлень від обробника завантажень до відповідного вигляду, наприклад, що я можу відобразити помилку користувачеві? Я спробував використати об'єкт запиту, але він незмінний.

Відповіді:

3 для відповіді № 1

Я знайшов причину, чому я не зміг це зробити і вирішити так само.

Здається, Джанго використовує лену оцінкудля запиту. ФАЙЛІВ до визначити, коли викликається обробник завантаження. Тому завантажити обробник викликається лише тоді, коли ви намагаєтеся отримати доступ request.FILES. Крім того, об'єкт запиту я використовую (WSGIRequest у моєму випадку) зробив GET і POST незмінних словників, тому ми не можемо передавати інформацію через нього, однак META все ще є доступно, щоб додати інформацію до.

Моє комбіноване рішення має рядок "запит".FILES "на думку, що обробляє завантаження, що змушує обробника завантаження розпочати. Коли помилка схоплена в new_files, я встановив self.request.META ["error"] на повідомлення про помилку і підняти StopUpload, який відштовхує нас назад до перегляд без файлу Нарешті, я перевіряю на запит. МЕТА ["помилка"] в переглядати та відображати це повідомлення, коли виникає проблема.

Я сподіваюсь, це допоможе!