如何让谷歌应用引擎支持django的ImageField?

时间:2016-01-26 04:33:08

标签: python django google-app-engine

目前,我正在开发一款运行在Google应用引擎顶部的django应用。模型领域之一看起来像,

picture = models.ImageField()

但它在保存特定型号时显示以下错误

  File "/django_projects/cityguide-backend/src/lib/django/db/models/fields/files.py", line 93, in save
    self.name = self.storage.save(name, content, max_length=self.field.max_length)
  File "/django_projects/cityguide-backend/src/lib/django/core/files/storage.py", line 63, in save
    name = self._save(name, content)
  File "/django_projects/cityguide-backend/src/lib/django/core/files/storage.py", line 248, in _save
    fd = os.open(full_path, flags, 0o666)
  File "/google_appengine/google/appengine/tools/devappserver2/python/stubs.py", line 73, in fake_open
    raise OSError(errno.EROFS, 'Read-only file system', filename)
OSError: [Errno 30] Read-only file system: u'/django_projects/backend/src/Screenshot_from_2014-04-18_190527.png'

经过一些研究,我发现GAE won't support writing operations to file system。我认为我需要使用GAE的blobstore或Google Cloud存储空间。但我不知道如何将这些与django的模型整合在一起。

1 个答案:

答案 0 :(得分:4)

具体而言,Django默认不支持App Engine的云存储或数据存储,需要自定义存储提供商才能使用它们。这些是官方Google文档涵盖的解决方案:

  • Django non-rel,支持App Engine数据存储区。另请参阅Cloud Platform文档中的相关article
  • 如果您更喜欢使用CloudSQL或外部MySQL数据库作为后端,则可以按照this guide使用django.db.backends.mysql模块。

还有以下非官方项目:

如果您想使用云存储实施自己的存储提供商,可以查看django-appengine-toolkit中的storage.py作为参考。