본문 바로가기
BE/DRF

2. TodoList API 작성

by aeyong-dev 2023. 7. 21.

본격적으로 DRF를 활용하여 실습을 진행해볼게요.

말투가 바뀌었죠? 내맘입니다. 

불편하게 글을 쓰니까 적기 싫어져서, 말도 편하게 하려고요 이제는. 하하

 

아무튼, TodoList API는 기본적인 CRUD기능을 갖춘 시스템을 만드는 것이 목표입니다.


2.1 TodoList API 시작

기본 세팅부터 시작하죠.

다들 아시죠? 생략합니다. 

세팅 마지막에는 settings.py에 앱(rest_framework, 내가 만든 앱)을 등록하는 것을 잊지 마세요.

그리고 나중에 만들 파일들을 미리 만들어 놓읍시다. 

todo 앱 폴더 안에 urls.py, serializers.py 파일을 미리 만듭시다. 

최종적인 디렉토리 구성은 다음과 같습니다.

이건 쉽잖아요?

models.py

제일 먼저 모델을 생성합시다. 

대충 다음과 같이 작성할게요.

from django.db import models

# Create your models here.

class Todo(models.Model):
    title = models.CharField(max_length=100)
    description = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    complete = models.BooleanField(default=False)
    important = models.BooleanField(default=False)

    def __str__(self):
        return self.title

title, description, created, complete, important를 만들어줬습니다. 

그리고 이 객체를 출력했을 때 제목을 출력하도록 __str__() 함수에 return self.title을 return 해주기로 했어요.

저는 미리 마이그레이션까지 해줬습니다. 

admin.py에 모델을 등록하는 것도 잊지 말아주세요. 저는 까먹었습니다


2.2 Todo 전체 조회 API 작성

Todo에 대한 전체 목록을 조회하는 API를 만들겠습니다. 

Serializer

시리얼라이저 개발부터 진행합니다. 

시리얼라이저가 뭐였죠? 

네, 데이터를 원하는 형식(JSON)으로 직렬화, 역직렬화를 해주는 것입니다. 

이것을 잘 기억하고, 다음과 같이 작성합니다. 

from rest_framework import serializers
from .models import Todo

class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = ('id', 'title', 'complete', 'important')

간단한 serializer인 만큼 TodoSimpleSerializer 라고 이름지었습니다. 

Todo 전체 조회 View 작성

그리고 View를 작성해줍니다. 

전에 배웠듯이, View를 작성하는 방법은 참 많습니다.

ViewSet을 사용하는 것이 훨씬 편하고 빠르지만, Todo에 대한 완료여부, 조회 기능이 포함되어 있으니 직접 만들도록 하겠습니다. 

from rest_framework import status
from models import Todo
from serializers import TodoSimpleSerializer
from rest_framework.views import APIView
from rest_framework import viewsets
from rest_framework.response import Response

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

간단한 코드이니 쉽게 이해 될 것입니다. 

마지막으로 url을 연결해줄게요.

from django.urls import path
from .views import TodosAPIView

urlpatterns = [
    path('todo/', TodosAPIView.as_view())
]

 

 

 

그리고 admin페이지에서 더미 데이터를 만들어줬습니다. 

postman을 활용하여 get요청을 보내볼게요.

잘 되는 모습을 확인할 수 있습니다. 

 

이후로 교재를 따라 차근차근 진행하면서 큰 문제 없이 프로젝트를 완성할 수 있었습니다. 

크게 궁금하거나, 문제가 되는 부분들은 없었어요.

위에서 언급했던 admin.py에 모델 등록하기, 마이그레이션하기 꼭 잊지 않으셔야 합니다!

 

'BE > DRF' 카테고리의 다른 글

1. DRF 시작하기  (0) 2023.07.07