[PYTHON] Laden Sie Dateien mit Django-Speicher in Google Cloud Storages hoch und löschen Sie sie

Hintergrund

Google Cloud Stoarge unter Verwendung der Django-Bibliothek django-storages Ich habe die Methode zum Löschen von Dateien durch Ausprobieren gelöst, daher werde ich das Memo einschließlich der Upload-Methode zusammenfassen.

Methode

Auf der Seite django-storages werden die Grundeinstellungen beschrieben.

settings.py


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

Wann,

settings.py


from google.oauth2 import service_account

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

Wenn Sie die beiden Punkte beschreiben und das Modell wie gewohnt definieren, funktioniert es beim Hochladen. Das Folgende ist ein Beispiel für ein Bilddateimodell.

models.py


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

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

Bis zu diesem Zeitpunkt wird die Google Cloud Storage-Datei jedoch nicht gelöscht, selbst wenn Sie den Datensatz löschen. Es scheint, dass (ich habe gerade die sekundären Informationen gelesen) das Designkonzept von Django selbst darin besteht, das Löschen von Dateien selbst zu implementieren, nicht nur bei Verwendung von Google Cloud Storage.

Um es zu implementieren, müssen Sie einen Dekorator verwenden, um die Funktion zu definieren, die beim Löschen von Datensätzen aufgerufen wird. Wenn Sie eine Datei mit der Google Cloud-Konsole löschen (wenn sich während dieses Vorgangs keine Datei auf der Seite des Google Cloud-Speichers befindet), tritt ein Fehler auf, sodass die Ausnahmeverarbeitung eingeschlossen ist.

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)

Wenn die Umgebungsvariable "GOOGLE_APPLICATION_CREDENTIALS" festgelegt ist, kann sie auch wie folgt im google.cloud-Modul implementiert werden. In diesem Fall ist jedoch ein Fehler aufgetreten, es sei denn, "storage.buckets.get" wurde als Berechtigung von Google Cloud zugewiesen.

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)

Ergänzung

Ich werde die Einstellungen auf der Google Cloud Storage-Seite ergänzen. Ich habe es nicht gut überprüft, daher benötige ich möglicherweise nicht alle, aber in meiner Umgebung stelle ich ein Dienstkonto mit den folgenden Berechtigungen aus.

Der offizielle Link enthält die tatsächliche Einstellungsmethode.

Recommended Posts

Laden Sie Dateien mit Django-Speicher in Google Cloud Storages hoch und löschen Sie sie
Laden Sie Dateien mit Lambda (Python) auf Google Drive hoch.
Hochladen von Dateien in den Cloud-Speicher mit dem Python-SDK von Firebase
Laden Sie Bilder mit Python auf Google Drive hoch
Erhalten Sie Tweets mit der Google Cloud-Funktion und speichern Sie Bilder automatisch in Google Fotos
Konvertieren Sie eine Tabelle in CSV und laden Sie sie mit Cloud-Funktionen in den Cloud-Speicher hoch
Laden Sie Dateien mit Django hoch
So laden Sie Dateien in Google Drive mit Google Colaboratory
Hochladen auf ein freigegebenes Laufwerk mit Google Drive API V3
Einfache Verwendung der Nifty Cloud API mit Botocore und Python
Spracherkennung von WAV-Dateien mit der Google Cloud Speech API Beta
Wie lösche ich mit SQLAlchemy?
Laden Sie Dateien mit SDK (Python-Version) auf Aspera hoch, das mit IBM Cloud Object Storage (ICOS) geliefert wird.
Apache Beam 2.0.x mit Google Cloud Dataflow beginnend mit IntelliJ und Gradle
Erhalten Sie Conversions und Einnahmen mit der Google Analytics-API und melden Sie sich bei Slack
So importieren Sie CSV- und TSV-Dateien mit Python in SQLite
Herstellen einer Verbindung zum Cloud Firestore über Google Cloud-Funktionen mit Python-Code
Versuchen Sie, Google Map und Geography Map mit Python anzuzeigen
Installieren Sie Anaconda auf Ihrem Mac und laden Sie Ihr Jupyter (IPython) -Notebook in die Anaconda Cloud hoch
Die stärkste Möglichkeit, MeCab und CaboCha mit Google Colab zu verwenden
Verschieben Sie Daten mit Python Change / Delete (Writer und Reader) nach LDAP.
Laden Sie Dateien in den Cloud Storage (GCS) von GCP hoch. ~ Laden Sie mit lokalem Python
Speichern und Abrufen von Dateien mit Pepper
Selen und Python zum Öffnen von Google
Laden Sie Bilder mit Falcon hoch und laden Sie sie herunter
Laden Sie Daten mit einem Befehl und einer Aktualisierung auf s3 von aws hoch und löschen Sie die verwendeten Daten (unterwegs).
Verwenden Sie shutil, um alle Ordner mit einer kleinen Anzahl von Dateien zu löschen
Einführung in Apache Beam mit Google Cloud Dataflow (über 2.0.x-Serie) ~ Combine Edition ~
Schließen Sie das Lesen und Schreiben von GCP an Secret Manager mit Google-Unterbefehlen ab
Kopieren Sie Daten von Amazon S3 mit Python (boto) in Google Cloud Storage.
Fühlen Sie sich frei, 100 Datenwissenschaften mit Google Colab und Azure Notebooks zu schlagen!
Ich habe das Stempeln von Job Can mit Selen automatisiert und in Google Cloud Functions bereitgestellt, aber es war ziemlich schwierig
GAE - Drehen Sie mit Python das Bild basierend auf den Rotationsinformationen von EXIF und laden Sie es in den Cloud-Speicher hoch.
[Linux] Unterteilen von Dateien und Ordnern
Streaming-Spracherkennung mit der Google Cloud Speech API
Führen Sie die Google-Übersetzung und die DeepL-Übersetzung mit der GUI aus
Fraktal zum Erstellen und Spielen mit Python
Bearbeiten und speichern Sie schreibgeschützte Dateien mit vim
Versuchen Sie, Python mit Google Cloud-Funktionen zu verwenden
Lesen und Schreiben von CSV-Dateien mit Numpy
So suchen Sie in Google Colaboratory nach Google Drive
Lesen und Schreiben von JSON-Dateien mit Python
[GCP] Betreiben Sie Google Cloud Storage mit Python
Konvertieren Sie PDF-Dateien mit GIMP in PNG-Dateien
Verwenden Sie TPU und Keras mit Google Colaboratory
Verwenden Sie den Befehl rm nicht, um Dateien zu löschen
Protokollausgabe der Google Cloud-Funktionen (und süchtig)
Verwenden Sie boto, um Dateien auf s3 hoch- / herunterzuladen.
So laden Sie automatisch .gpx-Dateien auf Strava hoch
Erstellen Sie eine API zum Konvertieren von PDF-Dateien in TIF-Bilder mit FastAPI und Docker
Verwenden Sie den Befehl [shell], um eine beliebige Datei zu komprimieren, um eine Datei zu erstellen und die Originaldatei zu löschen.
Geben Sie die Start- und Endpositionen der Dateien an, die in qiitap enthalten sein sollen
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python