Tiny Finger Point Hand With Heart
본문 바로가기
Python/DRF(Django REST Framework)

[DRF] Todo 목록 API만들기(3)

by yoondii 2023. 1. 30.
728x90
반응형


전체조회까지 잘 나오는 걸 보았으니 이제 상세 조회를 구현해보자.

 

Todo 상세 조회 serializer 만들기

#todo/serializers.py
.
.
.
#추가
class TodoDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model:Todo
        fields = ('id','title','description','created','complete','important')

Todo 상세 조회 view 만들기

전체 조회와는 주소가 다르기때문에 클래스를 구분해야한다.

#todo/views.py

from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.generics import get_object_or_404
from rest_framework import viewsets

from .models import Todo
from .serializers import TodosimpleSerializer,TodoDetailSerializer

# Create your views here.

class TodosAPIView(APIView):
    def get(self,request):
        todos = Todo.objects.filter(complete=False)
        serializer = TodosimpleSerializer(todos, many=True)
        return Response(serializer.data ,status=status.HTTP_200_OK)

class TodoAPIView(APIView):
    def get(slef,request,pk):
        todo = get_object_or_404(Todo,id=pk)
        serializer = TodoDetailSerializer(todo)
        return Response(serializer.data, status=status.HTTP_200_OK)

TodoAPIView라는 클래스를 만들고 get메서드에서 Todo객체를 가져오도록 한다.

TodoDetailSerializer에서 Todo 객체를 통과시킨 다음 Response로 전달한다.


Todo 상세 조회 URL 만들기

TodoAPIView는 특정 Todo 의 id를 기반으로 구분되므로 todo주소에 TodoAPIView를 할당한다.

 

#todo/urls.py

from django.urls import path

from .views import TodosAPIView,TodoAPIView

urlpatterns = [
    path('todo/',TodosAPIView.as_view()),
    path('todo/<int:pk>', TodoAPIView.as_view()),
]

상세조회 API테스트

url을 입력하고 확인해보면 세부사항이 잘 나오는 것을 볼 수 있다.

728x90
반응형

댓글