본문 바로가기

BackEnd/Django

[Django] 이미지 수정하기!

class ImageDetail(APIView):

def get(self, request, image_id, format=None):

user = request.user

try:
image = models.Image.objects.get(id=image_id)
except models.Image.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)

serializer =serializers.ImageSerializer(image)

return Response(data=serializer.data, status=status.HTTP_200_OK)
def put(self, request, image_id, format_=None):
user = request.user

try:
image = models.Image.objects.get(id=image_id, creator=user)
except models.Image.DoesNotExist:
return Response(status=status.HTTP_401_UNAUTHORIZED)

serializer = serializers.InputImageSerializer(
image, data=request.data, partial=True)

if serializer.is_valid():

serializer.save(creator=user)

return Response(data=serializer.data, status=status.HTTP_204_NO_CONTENT)

else :

return Response(data=serializer.errors, status=status.HTTP_400_BAD_REQUEST)


보시다시피 하나의 이미지를 보는 ImageDetail API에서


put 요청을 추가 했다.


생성자와 user가 동일해야하고 id는 이미지의 id와 동일해야함


시리얼라이저에서 


partial 부분이 있는데


class InputImageSerializer(serializers.ModelSerializer):

class Meta:
model =models.Image
fields = (
'file',
'location',
'caption',
)


우리가 고칠 내용은


파일, 위치, 캡션인데 이 세 인자는 모두 필수적인 요소임


그래서 하나라도 put(변경)하지 않으면 오류가 남


그래서


partial이 그것을 막아줌



이 후 조건문을 통해서 serializer에 있는 값이라면 바꾸고 그렇지 않다면 HTTP 400을 리턴함

'BackEnd > Django' 카테고리의 다른 글

[Django]User Profile 수정하기  (0) 2018.11.08
[Django] 이미지 삭제하기  (0) 2018.11.08
[Django] 좋아요 리스트 보기  (0) 2018.11.07
[Django]단일 이미지 보기  (0) 2018.11.07
[Django]내 이미지 댓글 지우기 [질문중]  (0) 2018.11.07