2010-08-27 8 views
8

Estoy usando Django 1.1 en Google App Engine a través del use_library. Aquí no se utilizan herramientas DDAgo GAE, Django non-rel ni similares. Django maneja el enrutamiento de URL, la validación de formularios, etc., pero estoy usando modelos puros de App Engine.Cómo evitar NotImplementedError "Sólo tempfile.TemporaryFile está disponible para su uso" en django en Google App Engine?

En uno de mis Django forma hay una FileField, que de vez en cuando, parece llamar django.core.files.uploadedfile.TemporaryUploadedFile. Esta clase se utiliza tempfile.NamedTemporaryFile y esto da lugar a la aplicación de elevación del motor:

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

Tratando de resolver este problema Tomé uploadedfile module de Google App Engine Helper para Django (que no utiliza NamedTemporaryFile) guardado como gae_uploadedfile.py en el directorio de la aplicación y en mi archivo _djangomain.py_ añadí:

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

djangomain.py es un archivo donde puedo redirigir todas las URL - en app.yaml tengo:

- url: /.* 
    script: djangomain.py 

Pero no sirvió de nada, sigo teniendo esta excepción. ¿Qué estoy haciendo mal? ¿Hay alguna otra solución para evitar este error al usar FileField en django.forms?

Respuesta

9

necesita actualizar el archivo settings.py con lo siguiente para cambiar el comportamiento predeterminado de 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 

Más información aquí: FILE_UPLOAD_MAX_MEMORY_SIZE y upload-handlers

Si va a cargar las imágenes que vaya restringido por las cuotas de 1 MB para la transformación de imágenes, etc. Quotas_and_Limits