ここでは、Djangoベースの(drfも)APIエンドでの投稿リクエストでBase64でエンコードされた画像ファイルを処理してImageFieldとして保存する方法を示します。
レッツは、次のようにモデルを持っていると言う:
Class MyImageModel(models.Model):
image = models.ImageField(upload_to = 'geo_entity_pic')
data=model.CharField()
次のように対応するシリアライザは、次のようになります。
from drf_extra_fields.fields import Base64ImageField
Class MyImageModelSerializer(serializers.ModelSerializers):
image=Base64ImageField()
class meta:
model=MyImageModel
fields= ('data','image')
def create(self, validated_data):
image=validated_data.pop('image')
data=validated_data.pop('data')
return MyImageModel.objects.create(data=data,image=image)
次のように対応するビューを指定できます
elif request.method == 'POST':
serializer = MyImageModelSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
通知シリアライザでは、モジュールで提供されたBase64ImageFieldの実装を使用しましたこのモジュールは
pip install django-extra-fields
のコマンドを実行してインストールするには
は同じと完了をインポートします!
JSONオブジェクト内のBase64エンコードされた文字列として画像を送信します(他のデータと同様に)。
あなたはこれを理解しましたか? –
はい、いいえ。イメージをテキストとして保存し、それをWebページにレンダリングするのはとても簡単です。 'img'タグでは' src = "data:image/png; base64、<ここのbase64文字列はここ>"です。私はそれが最良の方法であるかどうかはわかりませんが、うまく動作し、実装が簡単です。 – gozzilli
@gozzilli base64ベースのソリューションのビュー/シリアライザ/モデルでsnippestを提供できますか? – andi