2010-08-27 1 views
8

Sto utilizzando Django 1.1 su Google App Engine tramite use_library. Nessun helper Django GAE, strumenti Django non relé o simili sono usati qui. Django gestisce il routing degli URL, la convalida dei moduli, ecc., Ma sto utilizzando i modelli di App Engine puri.Come evitare NotImplementedError "Solo tempfile.TemporaryFile è disponibile per l'uso" in django su Google App Engine?

In uno dei miei Django forma c'è un FileField, che di volta in volta, sembra chiamare django.core.files.uploadedfile.TemporaryUploadedFile. Questa classe utilizza quindi tempfile.NamedTemporaryFile e questo si traduce in App Engine raising:

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

Cercando di risolvere questo problema ho preso uploadedfile module da Google App Engine Helper per Django (che non utilizza NamedTemporaryFile) salvato come gae_uploadedfile.py nella directory dell'applicazione e nel mio file _djangomain.py_ ho aggiunto:

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

djangomain.py è un file in cui i reindirizzare tutti gli URL - in app.yaml ho:

- url: /.* 
    script: djangomain.py 

Ma non ha aiutato, ho ancora questa eccezione. Cosa sto facendo male, c'è un'altra soluzione per evitare questo errore durante l'utilizzo di FileField da django.forms?

risposta

9

è necessario aggiornare il file settings.py con quanto segue per modificare il comportamento predefinito 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 

Maggiori informazioni qui: FILE_UPLOAD_MAX_MEMORY_SIZE e upload-handlers

Se si sta caricando immagini che sarà limitato dalle quote da 1 MB per la trasformazione dell'immagine ecc. Quotas_and_Limits