Django Rest Framework ImageField

 攸攸慢 发布于 2023-02-13 17:13

我无法在此ImageField中保存图像.

发送数据时:

{
    "image": ["No file was submitted. Check the encoding type on the form."]
}

model.py

class MyPhoto(models.Model):
    owner = models.ForeignKey('auth.User', related_name='image')
    image = models.ImageField(upload_to='photos', max_length=254)

serializers.py

class PhotoSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = MyPhoto
        fields = ('url', 'id', 'image', 'owner')
        owner = serializers.Field(source='owner.username')

view.py

class PhotoList(APIView):
    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly)

    def get(self, request, format=None):
        photo = MyPhoto.objects.all()
        serializer = PhotoSerializer(photo, many=True)
        return Response(data=serializer.data, status=status.HTTP_200_OK)

    def post(self, request, format=None):
       serializer = PhotoSerializer(data=request.DATA)
       if serializer.is_valid():
           serializer.save()
           return Response(serializer.data, status=status.HTTP_201_CREATED)
       return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def pre_save(self, obj):
        obj.owner = self.request.user


class PhotoDetail(APIView):

    permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly)

    def get_object(self, pk):
        try:
            return MyPhoto.objects.get(pk=pk)
        except MyPhoto.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        photo = self.get_object(pk)
        serializer = PhotoSerializer(photo)
        return Response(serializer.data)

    def put(self, request, pk, format=None):
        photo = self.get_object(pk)
        serializer = PhotoSerializer(photo, data=request.DATA)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk, format=None):
        photo = self.get_object(pk)
        photo.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

    def pre_save(self, obj):
        obj.owner = self.request.user

url.py

urlpatterns = patterns('',
    url(r'^$', 'main.views.main_page'),
    url(r'^api/photo/$', views.PhotoList.as_view(), name='myphoto-list'),
    url(r'^api/photo/(?P[0-9]+)/$', views.PhotoDetail.as_view(), name='myphoto-detail'),)

卷曲

curl -X POST -S \
  -H 'Content-Type: application/json' \
  -u "michael:bush_pass" \
  --data-binary '{"owner":"/users/1/", \
    "image":"/Users/test/Downloads/1383310998_05.jpg"}' \
  127.0.0.1:8000/api/photo/

Scofield77.. 37

我想你可以用request.data之后代替django rest framework 3.0.使用request.DATArequest.FILES现在正在等待弃用,以支持request.data包含所有已解析数据的单个属性.

你可以从这里查看

3 个回答
  • 使用Django Rest Framework上传图像文件:

    models.py:

    class MyPhoto(models.Model):
        name = models.CharField(max_length=255)
        image = models.ImageField(upload_to='myphoto/%Y/%m/%d/', null=True, max_length=255)
    

    serializers.py:

    class MyPhotoSerializer(serializers.ModelSerializer):
        class Meta:
            model = MyPhoto
            fields = ('id', 'name', 'image')
    

    views.py:

    class PhotoList(APIView):
        def post(self, request, format=None):
            serializer = MyPhotoSerializer(data=request.data)
            if serializer.is_valid():
                serializer.save()
                return Response(serializer.data, status=status.HTTP_201_CREATED)
            else:
                return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    

    希望它可以帮助某人.

    2023-02-13 17:15 回答
  • 我想你可以用request.data之后代替django rest framework 3.0.使用request.DATArequest.FILES现在正在等待弃用,以支持request.data包含所有已解析数据的单个属性.

    你可以从这里查看

    2023-02-13 17:16 回答
  • 您似乎错过request.FILES了您postput处理程序中的序列化程序构造函数的参数.

    serializer = PhotoSerializer(data=request.DATA, files=request.FILES)
    

    2023-02-13 17:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有