Ich muss ein Bild von einer App erhalten, und das Beste, was ich mir vorstellen kann, ist, es in ein JSON-Array zu schicken, das in Base64 kodiert ist. Das Bild ist sehr klein, daher ist mir der zusätzliche Overhead egal.
Ich habe ein Modell:
%Vor%Und sein Serialiser:
%Vor%Wo sollte ich den Code setzen, um das Bild zu entschlüsseln?
Hier erfahren Sie, wie Sie eine Base64-codierte Bilddatei in einer Post-Anfrage auf der Django-basierten (drf also) API-Seite behandeln können, die sie als ImageField speichert.
Nehmen wir an, Sie haben ein Modell wie folgt:
%Vor%Also wäre der entsprechende Serializer wie folgt:
%Vor%Die entsprechende Ansicht kann wie folgt aussehen:
%Vor%Hinweis In dem Serializer habe ich verwendet Implementierung von Base64ImageField im Modul vorgesehen django-extra-Feld
Um dieses Modul zu installieren, führen Sie den Befehl
aus %Vor%Importieren Sie das Gleiche und Fertig!
Senden Sie Ihr Bild (als Post-Methode) als Base64-codierten String im JSON-Objekt zusammen mit allen anderen Daten, die Sie haben.
Je nach Anwendungsfall gibt es zwei optimale Speicherorte:
In Ihrem Serializer haben Sie die Methoden validate_X
und transform_X
, die Sie für Ihr Feld überschreiben können (siehe Validierungsdokumente ) und zur Konvertierung in beide Richtungen hier.
Schreiben Sie Ihr eigenes benutzerdefiniertes Feld , wenn Sie die Funktion benötigen öfters. Sie müssen nur definieren, wie die Conversions in beiden Richtungen in to_native
und from_native
ausgeführt werden. Vielleicht erweitern Sie den ursprünglichen DRF ImageField
, um das Bild zu behalten -Datenvalidierung mit PIL.
Probieren Sie django extra Felder aus. Verwenden Sie Base64ImageField als ein Serializer-Feld unter der Annahme natürlich, dass Sie ein ImageField in Ihren Modellen verwendet haben.
Tags und Links django json django-models django-rest-framework