2016-01-26 9 views
10

Attualmente sto lavorando ad un'applicazione django che gira sul motore di google app. Uno di un campo di modello assomiglia,Come rendere google app engine per supportare ImageField di django?

picture = models.ImageField() 

Ma mostra l'errore sotto durante il salvataggio di quel particolare modello

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' 

Dopo alcune ricerche ho scoperto che, GAE won't support writing operations to file system. Penso di aver bisogno di usare GAE blobstore o Google Cloud storage. Ma non so come integrarli con il modello del django.

risposta

4

Per essere precisi, Django non supporta Cloud Storage o Datastore di App Engine per impostazione predefinita e richiede che i provider di storage personalizzati lavorino con loro. Queste sono le soluzioni coperte dai documenti ufficiali di Google:

  • Django non-rel che supporta App Engine Datastore. Vedi anche il relativo article nella documentazione di Cloud Platform.
  • Se si preferisce utilizzare CloudSQL o un database MySQL esterno come back-end, è possibile utilizzare il modulo django.db.backends.mysql come da this guide.

ci sono anche i seguenti progetti non ufficiali:

Se si desidera implementare il proprio provider di archiviazione utilizzando Cloud Storage, è possibile dare un'occhiata a storage.py da django-appengine-toolkit come riferimento.

+0

Non voglio usare alcun materiale esterno .. –

+0

Ho aggiornato la mia risposta. Se non si desidera utilizzare alcuna soluzione esterna, è necessario scrivere il proprio provider di archiviazione per Django. Puoi comunque utilizzare la fonte di uno qualsiasi di questi progetti come riferimento. – Adam