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

时间:2010-08-27 16:13:09

标签: python django google-app-engine django-forms

我通过use_library在Google App Engine上使用Django 1.1。这里没有使用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")

我尝试解决这个问题,我从Google App Engine Helper for Django(不使用NamedTemporaryFile)获取uploadedfile module,将其保存为gae_uploadedfile.py在应用程序目录和_djangomain.py_中1}}我添加的文件:

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

djangomain.py 是我重定向所有网址的文件 - 在 app.yaml 中我有:

- url: /.*
  script: djangomain.py

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

1 个答案:

答案 0 :(得分: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

此处有更多信息:FILE_UPLOAD_MAX_MEMORY_SIZEupload-handlers

如果您要上传图片,则会受到1MB图像转换配额的限制。Quotas_and_Limits