WEB/Django prac

[Django prac][DRF with Single Model] 9. PUT 수정

bay07 2024. 4. 15. 16:56

게시글의 데이터를 수정하는 명령어는 PUT이다. 

수정이 성공했을 경우에는 200 OK 응답을 받을 수 있다


# articles > views.py 

(partial = True)

부분 업데이트를 허용하기 위한 인자

예를 들어, partial 인자 값이 False일 경우, 게시글 title만을 수정할 수 없다. 

반드시 title에 content 값도 함께 전송해야한다. 

왜냐하면, 기본적으로 serializer는 모든 필수 필드에 대한 값을 전달 받기 때문이다. 
(즉, 수정하지 않는 다른 필드 데이터도 모두 전송해야 하여 그렇지 않으면 유효성 검사에서 오류가 발생한다)

더보기
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework import status


from .models import Article
from .serializers import ArticleListSerializer, ArticleSerializer

@api_view(['GET', 'POST'])
def article_list(request):
    if request.method == 'GET':
        articles = Article.objects.all()
        serializer = ArticleListSerializer(articles, many=True)
        return Response(serializer.data)
    
    elif request.method == 'POST':
        serializer = ArticleSerializer(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)



@api_view(['GET', 'DELETE', 'PUT'])
def article_detail(request, article_pk):
    article = Article.objects.get(pk=article_pk)
    if request.method == 'GET':
        serializer = ArticleSerializer(article)
        return Response(serializer.data)

    elif request.method == 'DELETE':
        article.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)
    
    elif request.method == 'PUT':
        serializer = ArticleSerializer(article, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_200_OK)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

 

# 서버 켜기

save all 

python manage.py runserver

 

포스트맨에서 PUT을 사용해서 제목, 내용 넣기 

 

수정이 잘 되었는지 확인해보기 


partial argument 옵션을 넣어주었기 때문에, 내용만 수정하는 것도 가능하다