TIL(25.2.12)

채채·2025년 2월 12일

Today I Learned

목록 보기
74/75

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 부분도 기대된다 !

profile
화이팅

0개의 댓글