게시글 데이터 생성하기
@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": # GET, POST외에도 많은 HTTPmethod 있으니까 elif로 확실히 나눔
serializer = ArticleListSerializer(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) # 에러가 낫을 때 에러를 담아서 줄지 빈객체를 줄지 클라이언트 개발자랑 협의하는 거임
POST http://127.0.0.1:8000/api/v1/articles/ 응답확인
새로 생성된 데이터 확인 해보기
이제 form 보여주고 채우세요 하는건 클라이언트 역할
Raising an exception on invaild data
"유효하지 않은 데이터에 대해 예외 발생시키기"
is_valid()
는 유효성 검사 오류가 있는 경우 ValidationError 예외를 발생시키는 선택적 raise_exception 인자를 사용할 수 있음- DRF에서 제공하는 기본 예외 처리기에 의해 자동으로 처리되면 기본적으로 HTTP 400 응답을 반환 (
raise_exception=True
로 하면 알아서return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
처리해줌 )
-> 코드 깔끔해짐- view 함수 코드 변경
게시글 데이터 삭제하기
@api_view(['GET', 'DELETE'])
def article_detail(request, article_pk):
if request.method == "GET":
article = Article.objects.get(pk=article_pk)
serializer = ArticleListSerializer(article)
return Response(serializer.data)
elif request.method == "DELETE" :
article = Article.objects.get(pk = article_pk)
article.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
@api_view(['GET', 'DELETE'])
def article_detail(request, article_pk):
article = Article.objects.get(pk=article_pk)
if request.method == "GET":
serializer = ArticleListSerializer(article)
return Response(serializer.data)
elif request.method == "DELETE" :
article.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
게시글 데이터 수정하기
@api_view(['GET', 'DELETE','PUT'])
def article_detail(request, article_pk):
article = Article.objects.get(pk=article_pk)
if request.method == "GET":
serializer = ArticleListSerializer(article)
return Response(serializer.data)
elif request.method == "DELETE":
article.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
elif request.method == "PUT":
# 입력 데이터 가져오고 save
serializer = ArticleListSerializer(article, data = request.data) # 역직렬화
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data) # 직렬화
PUT http://127.0.0.1:8000/api/v1/articles/1/ 응답 확인
수정된 데이터 확인 해보기
이전까지는 MTV 모두 사용했지만
M -> V 처리만 함
-> 백앤드 개발자의 많은 부분이 이러한 작업을 하는 것
-> T는 클라이언트 사이드에서 함