Как сделать движок Google для поддержки django ImageField?

В настоящее время я работаю над приложением django, которое работает в верхней части движка Google. Одно из полей модели выглядит следующим образом:

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 не поддерживает операции записи в файловую систему. Думаю, мне нужно использовать GAE blobstore или хранилище Google Cloud. Но я не знаю, как их интегрировать с моделью django.

Ответ 1

Чтобы быть конкретным, Django по умолчанию не поддерживает облачное хранилище приложений или хранилище данных App Engine и требует, чтобы пользовательские поставщики хранилищ работали с ними. Это решения, которые рассматриваются официальными документами Google:

  • Django non-rel, который поддерживает хранилище данных App Engine. См. Также связанную article в документации по облачной платформе.
  • Если вы предпочитаете использовать CloudSQL или внешнюю базу данных MySQL в качестве исходного кода, вы можете использовать модуль django.db.backends.mysql в соответствии с this руководство.

Существуют также следующие неофициальные проекты:

  • Djangae, это новый проект, специально предназначенный для хранилища данных App Engine.
  • django-appengine-toolkit 'поддерживает облачное хранилище.

Если вы хотите реализовать собственный поставщик хранилища с помощью Cloud Storage, вы можете посмотреть storage.py из django-appengine-toolkit как ссылку.