如何在Google App Engine上的django中避免NotImplementedError"只有tempfile.TemporaryFile可以使用"?

Paw*_*ski 8 python django google-app-engine django-forms

我正在通过Google App Engine使用Django 1.1 use_library.这里没有使用Django GAE助手,Django非rel或类似工具.Django处理URL路由,表单验证等,但我使用的是纯App Engine模型.

在我的一个Django表单中有一个FileField,它有时会调用django.core.files.uploadedfile.TemporaryUploadedFile.然后该类使用tempfile.NamedTemporaryFile,这会导致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")
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我从Google App Engine Helper for Django(不使用)中获取了uploadfile模块,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
Run Code Online (Sandbox Code Playgroud)

djangomain.py是一个文件,我重定向所有网址 - 在app.yaml我有:

- url: /.*
  script: djangomain.py
Run Code Online (Sandbox Code Playgroud)

但它没有帮助,我仍然得到这个例外.我做错了什么,是否有其他解决方案可以避免在使用FileField时出现此错误django.forms

小智 11

您需要使用以下更新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
Run Code Online (Sandbox Code Playgroud)

更多信息:FILE_UPLOAD_MAX_MEMORY_SIZE上传处理程序

如果您要上传图像,您将受到1MB图像转换配额的限制.Quotas_and_Limits