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 |