python – django rest framework 3 ImageField发送ajax结果“没
发布时间:2020-12-20 13:50:53 所属栏目:Python 来源:网络整理
导读:我有一个带有Django Rest Framework的API端点来上传图像. 你能发现我做错了什么吗? #models.py class test(models.Model): ... upload_path = 'upload/' image = models.ImageField(upload_to=upload_path,null=True,blank=True) ... #serializers.py class
我有一个带有Django Rest Framework的API端点来上传图像.
你能发现我做错了什么吗? #models.py class test(models.Model): ... upload_path = 'upload/' image = models.ImageField(upload_to=upload_path,null=True,blank=True) ... #serializers.py class TestSerializer(serializers.ModelSerializer): image = serializers.ImageField( max_length=None,use_url=True,) class Meta: model = test fields = ('id','name','image',...) #views.py @api_view(['GET','POST']) def test_list(request,site_id,block_id): .... if request.method == 'POST': serializer = TestSerializer(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) else : return Response(status=status.HTTP_403_FORBIDDEN) #js function setimage() { var $input = $("#js_teaser_img"); var fd = new FormData; fd.append('image',$input.prop('files')[0]); $.ajax({ url: '/api/....',data: fd,processData: false,contentType: false,type: 'POST',success: function (data) { alert(data); } }); } 结果图片:[“没有提交文件.”] 0:“没有提交文件.” 结果 Django REST Framework upload image: “The submitted data was not a file” ? var reader = new FileReader(); reader.onload = function(e) { var img_local = e.target.result; $('.js_img_src').attr('src',img_local); $.post('/api/..../7/',{'image':img_local},function( data ) { console.log(data); }); } reader.readAsDataURL(file); 解决方法
从客户端发送文件,你应该使用“multipart / form-data”(jQuery将contentType设置为“application / x-www-form-urlencoded”,默认情况下).
在SO: Sending multipart/formdata with jQuery.ajax上阅读这个问题 相反,对于python和django rest框架,您应该在API视图中使用MultiPartParser和/或FileUploadParser,并且应该“放置”文件上传的首选方法,正如您在此处的参考资料中所见:http://www.django-rest-framework.org/api-guide/parsers/#fileuploadparser. PS.如果您使用django rest框架,我强烈建议您使用Angular而不是jQuery,因为它为休息服务提供了极好的集成…相信我更好! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |