FBV는 함수 선언 위에 decorator를 사용하여 method별 행위를 정의한다. Decorator는 @로 시작한다.
# urls.py
from django.urls import path
from .views import quiz_view
urlpatterns = [
path("", quiz_view),
]
# views.py
from rest_framework import status
from rest_framework.response import Response
from rest_framework.decorators import api_view
from .models import Quiz
from .serializers import QuizSerializer
@api_view(['GET', 'POST'])
def quiz_view(request):
if request.method == 'GET':
quizzes = Quiz.objects.all() # 모든 quiz 불러 오기
serializer = QuizSerializer(quizzes, many=True)
return Response(serializer.data)
elif request.method == 'POST':
serializer = QuizSerializer(data=request.data)
if serializer.is_valid():
serializer.save() # DB에 저장
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
CBV는 class를 사용하여 method별 행위를 정의한다.
# urls.py
from django.urls import path
from .views import QuizView
urlpatterns = [
path("", QuizView.as_view()),
]
# views.py
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from .models import Quiz
from .serializers import QuizSerializer
class QuizView(APIView):
def get(self, request):
quizzes = Quiz.objects.all() # 모든 quiz 불러 오기
serializer = QuizSerializer(quizzes, many=True)
return Response(serializer.data)
def post(self, request):
serializer = QuizSerializer(data=request.data)
if serializer.is_valid():
serializer.save() # DB에 저장
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)