2017-08-14 6 views
0

J'écris une application photo assez simple en utilisant django-rest-framework pour l'API et django-stockages pour le moteur de stockage. L'interface est en cours d'écriture dans Vue.js. J'ai la partie de téléchargement fonctionnant, et maintenant j'essaye de servir les photos. Comme il semble maintenant évident lorsque le navigateur essaie de charger les images à partir de GCS, je reçois juste un tas d'erreurs 403 Forbidden. J'ai fait quelques lectures à ce sujet et il semble que la meilleure pratique dans mon cas serait de générer des urls signés qui expirent dans un certain temps. Je n'ai pas été en mesure de trouver un paquet pour cela, ce qui était ce que j'espérais. Bref, je ne sais pas exactement comment faire ça dans Django.Existe-t-il des packages Django pour créer des URL signées pour les ressources Google Cloud Storage?

Répondre

2

Oui, jetez un oeil à google-cloud-storage

Installation:

pip install google-cloud-storage 

Aussi, assurez-vous de se référer à API Documentation que vous avez besoin d'autres choses.

J'espère que ça aide!

+0

Je trouve une fonction appelée 'il generate_signed_url', ce qui est exactement ce que je dois. Où recommanderiez-vous d'utiliser ceci dans une application django-rest-framework? Je pense à l'utiliser dans 'views.py' ... –

+0

@EvanZamir dépend de votre cas. Si c'est cette vue spécifique, c'est le cas de views.py. Si cela fait partie d'une logique métier, vous pouvez le placer dans une méthode de modèle. –

0

Je fini par résoudre ce problème en utilisant to_representation dans serializers.py:

from google.cloud.storage import Blob 
client = storage.Client() 
bucket = client.get_bucket('myBucket') 

    def to_representation(self, value): 
     try: 
      blob = Blob(name=value.name, bucket=bucket) 
      signed_url = blob.generate_signed_url(expiration=datetime.timedelta(minutes=5)) 
      return signed_url 
     except ValueError as e: 
      print(e) 
      return value