Django REST Framework FBV, CBV

Choi Yeonung·2021년 10월 31일
0

Django REST Framework

목록 보기
1/3
post-thumbnail

FBV (Function-Based View)

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-Based View)

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)
profile
Code as a hobby

0개의 댓글