이번 글은 Todo app 생성 후 Todo 객체 생성, 조회, 수정 구현까지의 코드를 정리했습니다.
먼저, python manage.py startapp todo
로 앱 생성 그리고 settings.py
에서 앱 등록
# 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)
python manage.py makemigrations
python manage.py migrate
# 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')
# 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)
# 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')),
]
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)