Как избежать NotImplementedError "Только tempfile.TeoraryFile доступен для использования" в django на Google App Engine? - PullRequest
8 голосов
/ 27 августа 2010

Я использую Django 1.1 в Google App Engine через use_library. Никакие вспомогательные средства Django GAE, Django non-rel или подобные инструменты здесь не используются. Django занимается маршрутизацией URL-адресов, проверкой форм и т. Д., Но я использую только модели App Engine.

В одной из моих форм Django есть FileField, который время от времени, кажется, вызывает django.core.files.uploadedfile.TeoraryUploadedFile . Затем этот класс использует tempfile.NamedTeilitaryFile , и это приводит к повышению уровня App Engine:

File "/base/python_runtime/python_dist/lib/python2.5/tempfile.py", line 45, in PlaceHolder
   raise NotImplementedError("Only tempfile.TemporaryFile is available for use")

Пытаясь решить эту проблему, я взял модуль загруженного файла из Google App Engine Helper для Django (который не использует NamedTemporaryFile), сохранил его как gae_uploadedfile.py в каталоге приложения и в моем _djangomain.py_ файл, который я добавил:

from google.appengine.dist import use_library
use_library('django', '1.1')
(...)
import gae_uploadedfile
django.core.files.uploadedfile = gae_uploadedfile

djangomain.py - это файл, куда я перенаправляю все URL - в app.yaml У меня есть:

- url: /.*
  script: djangomain.py

Но это не помогло, я все еще получаю это исключение. Что я делаю не так, есть другое решение, чтобы избежать этой ошибки при использовании FileField из django.forms?

1 Ответ

11 голосов
/ 01 декабря 2010

Вам необходимо обновить файл settings.py следующим образом, чтобы изменить поведение Django по умолчанию:

# only use the memory file uploader, do not use the file system - not able to do so on
# google app engine
FILE_UPLOAD_HANDLERS = ('django.core.files.uploadhandler.MemoryFileUploadHandler',)
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440 # the django default: 2.5MB

Подробнее здесь: FILE_UPLOAD_MAX_MEMORY_SIZE и Upload-обработчики

Если вы загружаете изображения, вы будете ограничены квотами в 1 МБ для преобразования изображений и т. Д. Quotas_and_Limits

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...