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

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

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


전체조회랑 상세조회를 만들어보았고, 이제 생성기능을 만들어 보자!

 

생성용 serializer 만들기

나머지필드는 자동으로 채워지기 때문에 직접 입력해줘야하는 필드만 만들면 된다.

#todo/serializers.py

from rest_framework import serializers
from .models import Todo
.
.
.

#생성
class TodoCreateserializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = ('title','description','important')

생성 view 만들기

pk가 필요없는 작업이기 때문에 TodosAPIView클래스 내에 포함되어 post방식으로 통신하도록 작성할 수 있다.

#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,TodoCreateSerializer

# 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)

    def post(self,request):#생성
        serializer = TodoCreateSerializer(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)

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)

TodosAPIView클래스 내 post 메서드에서 전달받은 데이터를 TodoCreaeSerializer에 통과시켜 파이썬 모델 개체로 만들고,

이에 대한 유효성 검사를 하고 저장을 한다. 유효하지 않을 경우 에러를 출력하게 함.


생성 URL 연결하기

TodosAPIView에 할당했기 때문에 따로 연결해주지 않아도 된다.


생성 API 테스트하기

POST요청으로 url을 입력하면고 body부분을 JSON으로 바꾼 후 내용을 입력해주면 된다.

그 다음 잘 생성되었는지 확인 해보면

따란~ 쉽지요?

728x90
반응형

댓글