0

Comment utiliser un backend de stockage personnalisé Django avec Google Cloud Storage?Comment utiliser django-google-cloud-storage pour GCS dans Django sur GAE

Essayer d'utiliser: ckopanos's django-google-cloud-storage

Selon la documentation, j'ai ajouté ce qui suit à mon 'settings.py':

GOOGLE_CLOUD_STORAGE_BUCKET = [my bucket name] # the name of the bucket you have created from the google cloud storage console 
GOOGLE_CLOUD_STORAGE_URL = [my bucket URL] #whatever the url for accessing your cloud storgage bucket 
GOOGLE_CLOUD_STORAGE_DEFAULT_CACHE_CONTROL = [cache control] # default cache control headers for your files 

DEFAULT_FILE_STORAGE = 'google.storage.googleCloud.GoogleCloudStorage' 

Et j'ajouté le dossier 'google'/package à mon les fichiers de projet doivent donc être accessibles pour 'settings.py'

Comment utiliser ce système de stockage personnalisé dans mes vues maintenant?

Je peux utiliser manuellement GCS en procédant comme suit (cet exemple stocke une xlsx sur GCS):

import cloudstorage as gcs 
from google.appengine.api import app_identity 
import xlsxwriter 
import StringIO 

bucket_name = os.environ.get('BUCKET_NAME', 
          app_identity.get_default_gcs_bucket_name()) 
bucket = '/' + bucket_name 

filename = bucket + '/'+ userid + '/' + [some code] + '.xlsx' 
gcs_file = gcs.open(filename, 
      'w', 
      content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 
      options={'x-goog-meta-user': userid}) 

output = StringIO.StringIO() 
workbook = xlsxwriter.Workbook(output, {'in_memory': True}) 
worksheet = workbook.add_worksheet() 

worksheet.write(0, 0, 'Hello World') 

# Close the workbook before streaming the data. 
workbook.close() 

# Rewind the buffer. 
output.seek(0)    

gcs_file.write(output.read()) 
gcs_file.close() 

Comment importer le système de stockage pour une utilisation dans mon point de vue? Recommanderiez-vous un système de stockage différent pour Django et GCS à la place?

+0

Recommandé par qui? Dans quel but? – jonrsharpe

+0

Désolé, laissez-moi reformuler. Quel est le moyen le plus simple, ou le plus facile à implémenter (qui est encore maintenu), pour connecter Django avec Cloud Storage? Sans avoir besoin d'écrire mon propre système de stockage personnalisé. (Par exemple, existe-t-il un package "plug and play" que je peux utiliser et qui fonctionne avec peu de frais de développement). Le but est de: télécharger les fichiers xlsx, xls et csv de plusieurs utilisateurs vers gcs, et d'autoriser les téléchargements privés de ces mêmes fichiers (limités uniquement à l'utilisateur qui a téléchargé le fichier). – cj1689262

+0

La recherche d'un package est explicitement hors-sujet, la plus simple étant probablement basée sur l'opinion. S'il vous plaît voir [demander]. – jonrsharpe

Répondre

1

Comme la façon dont vous utiliseriez n'importe quel autre système de stockage de fichiers dans Django, car les backends de stockage personnalisés dans Django sont construits en définissant une classe de stockage personnalisée qui doit être subclass of django.core.files.storage.Storage.

django-cloud-storage, est un backend de stockage personnalisé qui vous permet d'utiliser GCS dans Django, comme vous le feriez si vous utilisiez un autre backend de stockage. La ligne ci-dessus dans settings.py fait de GCS votre système de stockage de fichiers par défaut. Cela signifie que si vous définissez un nouveau FileField dans votre models, il utilisera Google Cloud Storage.

Vous pouvez l'utiliser dans vos vues comme ceci:

from django.core.files.storage import default_storage 
file = default_storage.open(file_name, 'w') 
file.write(output.read()) 
file.close() 

Le fichier sera enregistré dans votre seau par défaut.

+0

Merci, c'est comme ça que j'ai fini par l'utiliser. Je commençais à être confus parce que, en lisant la documentation, cela semblait impliquer que si vous importiez 'default_storage' avec 'from django.core.files.storage, vous importiez default_storage', cela importerait le système de stockage par défaut de _Django's (stockage du système de fichiers) et non votre settings.py a défini le système DEFAULT_FILE_STORAGE. – cj1689262