django - 在 Django Rest Framework 中接收 Base64 编码的图像并保存到 ImageField

标签 django json django-models django-rest-framework

我需要从应用程序接收图像,我能想到的最好方法是将其发送到以 Base64 编码的 JSON 数组中。图像非常小,所以我不在乎额外的开销。

我有一个模型:

class Observation(models.Model):    
    ...
    sonogram_image = models.ImageField(upload_to=sonogram_dir)

及其序列化器:
class ObsvSerializerNoDetect(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Observation

我应该把解码图像的代码放在哪里?

最佳答案

这是在基于 Django(也称为 drf)的 API 端的 post 请求中处理 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() # From DRF Extra Fields
      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 django-extra-fields
导入相同的并完成!
将您的图像作为 JSON 对象中的 Base64 编码字符串连同您拥有的任何其他数据一起发送(通过 post 方法)。

关于django - 在 Django Rest Framework 中接收 Base64 编码的图像并保存到 ImageField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16523192/

相关文章:

django - "Invalid HTTP_HOST header"来自未知域

django - django admin中的备用用户选择界面,以减少大型站点上的页面大小?

java - simple-json 正在整理我的数据

Django Admin Inline 返回空的额外实例

django - Prometheus-Django:连接被拒绝

django - 什么是基于模型的搜索?

iphone - 将 JSON 文件发送到 iPhone 以进行 iOS 应用程序测试

asp.net - 使用 jquery 将数据表转为 Json

django - 在 Django 中保存嵌套表单

django - Django多个文件字段