DRF CBV (Class-Based Views)로 CRUD 작성해보기
RESTful API 개발을 위해 클래스 기반 뷰 작성기.
스타터반에서 반복에 반복을 해서 생각보다 쉽게 작성이 되었음.
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Post, Tag
from .serializers import PostSerializer, TagSerializer
from django.shortcuts import get_object_or_404
# 목록보기, 글 쓰기
# post/
class PostListCreateView(APIView):
def get(self, request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
def post(self, requst):
data = requst.data
serializer = PostSerializer(data=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/<int:pk>/
class PostDetailView(APIView):
def get(self, request, pk):
post = get_object_or_404(Post, id=pk)
serializer = PostSerializer(post)
return Response(serializer.data, status=status.HTTP_200_OK)
def put(self, request, pk):
post = get_object_or_404(Post, id=pk)
data = request.data
serializer = PostSerializer(post, data=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)
def delete(self, request, pk):
post = get_object_or_404(Post, id=pk)
post.delete()
return Response(
{"message": "삭제되었습니다"}, status=status.HTTP_204_NO_CONTENT
)
다음주 user 부분도 기대된다 !