我通过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时出现此错误?
答案 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_SIZE和 upload-handlers
如果您要上传图片,则会受到1MB图像转换配额的限制。Quotas_and_Limits