我想这是最干净和最短的方法。
这是在基于 Django(也称为 drf)的 API 端的发布请求中处理 Base64 编码图像文件的方法,该 API 将其保存为 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)
对应的View可以如下:
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)
注意在序列化器中,我使用了模块django-extra-field中提供的 Base64ImageField 的实现
要安装此模块,请运行命令
pip install pip install django-extra-fields
导入相同的并完成!
发送(通过 post 方法)您的图像作为 JSON 对象中的 Base64 编码字符串以及您拥有的任何其他数据。