Notice
Recent Posts
Recent Comments
Link
터칭 데이터
장고(Django) Generic API View 본문
우리가 지난 시간 Mixins를 사용하며 작성한 polls_api/views.py의 코드 입니다.
from django.shortcuts import render, get_object_or_404
# from rest_framework.decorators import api_view
from polls.models import Question
from .serializers import QuestionSerializer
from rest_framework.response import Response
from rest_framework import status, mixins, generics
from rest_framework.views import APIView
# Create your views here.
class QuestionList(mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
class QuestionDetail(mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.DestroyModelMixin, generics.GenericAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
여기서 generics를 이용해 더 줄일 수 있습니다.
polls_api/views.py 에서 generics를 이용해 코드를 줄인 결과물 입니다.
from polls.models import Question
from .serializers import QuestionSerializer
from rest_framework import generics
# Create your views here.
class QuestionList(generics.ListCreateAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
class QuestionDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
어떻게 이런게 가능할까요?
우리가 지난 시간에 mixins를 사용할 때는 list(), create(), retrieve(), update(), destroy()를 전부 적어줬었는데요. 이번에는 class를 만들 때 상속을 generics.ListCreateAPIView로 list()와 create() 메서드를 대체하고, generics.RetrieveUpdateDestroyAPIView로 retrieve(), update(), destroy() 메서드를 대체했기 때문입니다.
만약 여기서 여러분이 destroy(delete)를 별도로 커스터 마이즈해서 구현하고 싶다면 generics.~ 에서 Destroy가 없는 클래스를 상속받아 구현하시면 됩니다.
'장고 (Django)' 카테고리의 다른 글
장고(Django) User 추가하기 (0) | 2023.11.05 |
---|---|
장고(Django) 정참조와 역참조 (3) | 2023.11.05 |
장고(Django) 믹스인(Mixin) (0) | 2023.11.04 |
장고(Django) 클래스(Class) 기반의 뷰(Views) (0) | 2023.11.04 |
장고(Django) PUT/DELETE (0) | 2023.11.04 |