DRF - Todo API

OneDayDev·2022년 11월 28일
0

Django

목록 보기
2/14
post-thumbnail

Todo API

이번 글은 Todo app 생성 후 Todo 객체 생성, 조회, 수정 구현까지의 코드를 정리했습니다.

먼저, python manage.py startapp todo로 앱 생성 그리고 settings.py에서 앱 등록

Todo Model 생성

# todo/models.py
from django.db import models

class Todo(models.Model):
    title = models.CharField(max_length=50)
    description = models.TextField(blank = True)
    created_date = models.DateTimeField(auto_now_add=True)

DB 반영

python manage.py makemigrations
python manage.py migrate

Serializer 만들기

# todo/serializers.py
from rest_framework import serializers
from .models import Todo


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

class TodoCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = ('title', 'description')

class TodoDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = ('id', 'title', 'description', 'created_date')

View 만들기

# todo/view.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 .models import Todo
from .serializers import *


class TodosAPIView(APIView):
    def get(self, request):
        todos = Todo.objects.all()
        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(self, request, pk):
        todo = get_object_or_404(Todo, id=pk)
        serializer = TodoDetailSerializer(todo)
        return Response(serializer.data, status=status.HTTP_200_OK)
    
    def put(self, request, pk):
        todo = get_object_or_404(Todo, id=pk)
        serializer = TodoCreateSerializer(todo, data=request.data)
        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)

url 설정

# todo/urls.py
from django.urls import path

from .views import *

urlpatterns = [
    path('todo/',TodosAPIView.as_view()),
    path('todo/<int:pk>/', TodoAPIView.as_view()),
]
# MyDRF/urls.py
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('todo.urls')),
]

Test

Create 기능 Test를 위해 Post 요청을 해본다

import requests

# 생성
# endpoint = "http://127.0.0.1:8000/todo/"
# test_data = {'title':'test1','description':'test1'}
# post_response = requests.post(endpoint, data=test_data)
# print(post_response)

# 조회
# endpoint = "http://127.0.0.1:8000/todo/1/"
# get_response = requests.get(endpoint)
# print(get_response.text)

# 수정
# endpoint = "http://127.0.0.1:8000/todo/2/" 
# test_data = {'title':'test2','description':'test2'}
# put_response = requests.put(endpoint, data=test_data)
# print(put_response)
profile
안녕하세요.

0개의 댓글