[PYTHON] Importez et supprimez des fichiers dans Google Cloud Storages avec django-storage

Contexte

Google Cloud Stoarge en utilisant la bibliothèque de Django django-storages J'ai résolu la méthode de suppression de fichier par essais et erreurs, je vais donc résumer le mémo, y compris la méthode de téléchargement.

Méthode

La page django-storages décrit les paramètres de base.

settings.py


DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'YOUR_BUCKET_NAME_GOES_HERE'

Quand,

settings.py


from google.oauth2 import service_account

GS_CREDENTIALS = service_account.Credentials.from_service_account_file(
    "path/to/credentials.json"
)

Si vous décrivez les deux points et définissez le modèle comme d'habitude, il fonctionnera pour le téléchargement. Voici un exemple de modèle de fichier image.

models.py


class Image(models.Model):
    image = models.ImageField(upload_to='image/')

    def __str__(self):
        return self.image.name

Cependant, jusqu'à présent, même si vous supprimez l'enregistrement, le fichier Google Cloud Storage ne sera pas supprimé. Il semble que (je viens de lire les informations secondaires) le concept de conception de Django lui-même consiste à implémenter la suppression de fichiers par moi-même, pas seulement lors de l'utilisation de Google Cloud Storage.

Pour l'implémenter, vous devez utiliser un décorateur pour définir la fonction qui sera appelée lors de la suppression des enregistrements. Si vous supprimez un fichier avec Google Cloud Console (lorsqu'il n'y a pas de fichier du côté de Google Cloud Storage pendant ce processus), une erreur se produit, le traitement des exceptions est donc inclus.

models.py


from django.dispatch import receiver
from google.cloud import exceptions

@receiver(models.signals.post_delete, sender=Image)
def auto_delete_image(sender, instance, **kargs):
    file = instance.image
    try:
        file.storage.delete(name=file.name)
    except exceptions.NotFound as e:
        print(e)

Si la variable d'environnement GOOGLE_APPLICATION_CREDENTIALS est définie, elle peut également être implémentée dans le module google.cloud comme suit. Cependant, dans ce cas, une erreur s'est produite à moins que storage.buckets.get n'ait été attribué en tant qu'autorité de google cloud.

model.py


from google.cloud import storage
from django.conf import settings

@receiver(models.signals.post_delete, sender=Image)
def auto_delete_image(sender, instance, **kargs):
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(settings.GS_BUCKET_NAME)
    blob = bucket.blob(instance.image.name)
    try:
        blob.delete()
    except exceptions.NotFound as e:
        print(e)

Supplément

Je compléterai les paramètres côté Google Cloud Storage. Je ne l'ai pas bien vérifié, donc je n'ai peut-être pas besoin de tout, mais dans mon environnement, j'émets un compte de service avec les autorisations suivantes.

Le lien officiel est affiché pour la méthode de réglage réelle.

Recommended Posts

Importez et supprimez des fichiers dans Google Cloud Storages avec django-storage
Télécharger des fichiers sur Google Drive avec Lambda (Python)
Comment télécharger des fichiers sur Cloud Storage avec le SDK Python de Firebase
Télécharger des images sur Google Drive avec Python
Recevez des tweets avec la fonction Google Cloud et enregistrez automatiquement les images dans Google Photos
Convertissez la feuille de calcul en CSV et importez-la dans Cloud Storage avec Cloud Functions
Télécharger des fichiers avec Django
Comment charger des fichiers dans Google Drive avec Google Colaboratory
Transférer vers un Drive partagé avec l'API Google Drive V3
API Nifty Cloud facile à utiliser avec botocore et python
Reconnaissance vocale des fichiers wav avec Google Cloud Speech API Beta
Comment supprimer avec SQLAlchemy?
Télécharger des fichiers sur Aspera fournis avec IBM Cloud Object Storage (ICOS) à l'aide du SDK (version Python)
Apache Beam 2.0.x avec Google Cloud Dataflow commençant par IntelliJ et Gradle
Obtenez des conversions et des revenus avec l'API Google Analytics et faites un rapport à Slack
Comment importer des fichiers CSV et TSV dans SQLite avec Python
Comment se connecter à Cloud Firestore à partir de Google Cloud Functions avec du code Python
Essayez d'afficher la carte google et la carte géographique avec python
Installez Anaconda sur votre Mac et téléchargez votre notebook Jupyter (IPython) sur Anaconda Cloud
La meilleure façon d'utiliser MeCab et CaboCha avec Google Colab
Déplacer les données vers LDAP avec python Change / Delete (Writer et Reader)
Télécharger le fichier sur Cloud Storage (GCS) de GCP ~ Charger avec Python local
Enregistrer et récupérer des fichiers avec Pepper
Sélénium et python pour ouvrir Google
Télécharger et télécharger des images avec Falcon
Mettez à jour les données en les téléchargeant sur s3 d'aws avec une commande, et supprimez les données utilisées (en chemin)
Utilisez shutil pour supprimer tous les dossiers avec un petit nombre de fichiers
Introduction à Apache Beam avec Google Cloud Dataflow (sur la série 2.0.x) ~ Combine Edition ~
Enveloppez la lecture et l'écriture de GCP dans Secret Manager avec les sous-commandes google
Copier des données d'Amazon S3 vers Google Cloud Storage avec Python (boto)
N'hésitez pas à frapper 100 sciences des données avec Google Colab et Azure Notebooks!
J'ai automatisé l'estampillage de Job Can avec du sélénium et l'ai déployé sur Google Cloud Functions, mais c'était assez difficile
GAE --Avec Python, faites pivoter l'image en fonction des informations de rotation d'EXIF et importez-la dans Cloud Storage.
[Linux] Comment subdiviser des fichiers et des dossiers
Reconnaissance vocale en streaming avec l'API Google Cloud Speech
Exécuter la traduction Google et la traduction DeepL avec l'interface graphique
Fractal pour faire et jouer avec Python
Modifier et enregistrer des fichiers en lecture seule avec vim
Essayez d'utiliser Python avec Google Cloud Functions
Lire et écrire des fichiers csv avec numpy
Comment rechercher Google Drive dans Google Colaboratory
Lire et écrire des fichiers JSON avec Python
[GCP] Exploitez Google Cloud Storage avec Python
Convertir des fichiers PDF en fichiers PNG avec GIMP
Utilisez TPU et Keras avec Google Colaboratory
N'utilisez pas la commande rm pour supprimer des fichiers
Sortie du journal Google Cloud Functions (et accro)
Utilisez boto pour charger / télécharger des fichiers vers s3.
Comment télécharger automatiquement des fichiers .gpx sur Strava
Créez une API pour convertir des fichiers PDF en images TIF avec FastAPI et Docker
Utilisez la commande [shell] pour compresser par zip n'importe quel fichier pour créer un fichier et supprimer le fichier d'origine.
Spécifiez les positions de début et de fin des fichiers à inclure avec qiitap
Comment utiliser OAuth et API de compte de service avec le client API Google pour python