[Django] PATCH API 분석, GenericAPIView + mixins.UpdateModelMixin

서재환·2022년 9월 13일
0

Django

목록 보기
28/40
class ModifyPartsBillEndDepositView(generics.GenericAPIView, mixins.UpdateModelMixin):
    """
    청구서 종결/입금여부
    """

    serializer_class = ModifyPartsBillEndDepositSerializer
    queryset = PartsBill.objects.all()
    permission_classes = [permissions.AllowAny]

    def patch(self, request, *args, **kwargs):
        return self.partial_update(request, *args, **kwargs)

점검항목

  • generics.GenericAPIView
  • mixins.UpdateModelMixin
  • ModifyPartsBillEndDepositSerializer
  • queryset
  • patch

generic views

장고에서 자주 사용하는 뷰를 미리 만들어서 제공한다. 클래스로 구현되어 있어 상속받아 사용한다. 크게 5가지 종류가 있다.

  • Simple generic views
SimpleGenericViews = [View, TemplateView, RedirectView]
  • Detail Views
DetailViews = [DetailView]
  • List Views
DetailViews = [ListView]
  • Editing views
EditingViews = [FormView, CreateView, UpdateView, DeleteView]
  • Date-based views
DateBaseViews = [ArchiveIndexView, YearArchiveView, 
				MonthArchiveView, WeekArchiveView,
                DayArchiveView, TodayArchiveView,
                DateDetailView]

공식문서

GenericAPIView

  • GenericAPIView 는 CRUD에서 공통적으로 사용되는 속성을 제공한다.

속성

  • queryset
    반드시 1)quryset 속성을 설정하거나 2) get_queryset() 메서드를 override 해서 사용한다.
    queryset을 지정할 때 models.objects.all() 부문으로 들고온다. 장고는 기본적으로 models.Model을 상속하는 model과 관련해서

  • serializer_class
    validate, serialize, deserialize 연산을 수행하기 위해 사용하는 클래스, 속성을 설정하거나 get_serializer_class() 메서드를 override 해서 사용한다.

class ModifyPartsBillEndDepositView(generics.GenericAPIView, ):
    """
    청구서 종결/입금여부
    """

    serializer_class = ModifyPartsBillEndDepositSerializer
    queryset = PartsBill.objects.all()

mixins.UpdateModelMixin

  • 믹신(mixins) 모듈은 목록을 보여주거나, 생성, 삭제, 수정 등의 반복적인 로직을 처리한다. 이러한 기능을 하나의 Mixin 클래스로 제공한여 반복적인 일을 줄여주고 가독성, 생산성을 높여줄 수 있다.
    일례로 APIView를 상속받은 클래스뷰의 경우 serializer 별로 처리를 해주어야 했지만 mixins의 경우 querysetserializer_class 속성만 지정해주면 serializer 관련해서 유효성검사 및 저장을 하지 않아도 된다.

  • 모델 인스턴스를 수정하여 저장해 주는 객체이다.

  • .update(request, *args, **kwargs) 메소드로 호출하여 사용한다.

  • 부분만 변경하고자 할 경우, .partial_update(request, *args, **kwargs)메소드를 호출하고, 이 때 요청은 HTTP PATCH requests이다.

  • 성공 시, 200 OK response 리턴한다.

  • 실패 시, 404 Not Found 리턴한다.

GenericAPIView + mixins

정리

해당 API의 기능은 부품사 페이지에서 청구서 종결 및 입금 여부와 관련해서 True or False를 설정하는 API 이다. 이와 관련된 field는 모델 PartsBill이 가지고 있어 이를 수정하기 위해 querysetserializer을 설정해주는 것이다.
GenericAPIView + mixins

0개의 댓글