我无法在此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.DATA
和request.FILES
现在正在等待弃用,以支持request.data
包含所有已解析数据的单个属性.
你可以从这里查看
使用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)
希望它可以帮助某人.
我想你可以用request.data
之后代替django rest framework 3.0
.使用request.DATA
和request.FILES
现在正在等待弃用,以支持request.data
包含所有已解析数据的单个属性.
你可以从这里查看
您似乎错过request.FILES
了您post
和put
处理程序中的序列化程序构造函数的参数.
serializer = PhotoSerializer(data=request.DATA, files=request.FILES)