Project/Team22

[Team 22] DRF - Mixins

mingyung 2024. 2. 8. 20:17

Generic view의 경우 CRUD작업을 위한 공통 부분을 제공하는 뷰임을 이전 포스팅에서 알아보았다.

제네릭 뷰는 여러개의 Mixin클래스를 결합하여 사용하게 된다. 

 

오늘은 제네릭뷰와 함꼐 쓰이는 믹스인 클래스에 대해서 알아보도록 하자.

 

Mixin 소개

믹스인을 사용하지 않는다면, Genericview를 사용할때 모든 기능을 직접 구현해야 한다.

하지만 사실상 CRUD작업과 목록출력같은 작업은 수많은 뷰에 공통적으로 들어가는 작업일 것이다.

이 기능들을 Mixin을 통해서 간단하게 제공받을 수 있다.

 

mixins는 rest_framework.mixins 모듈에 있다.

 

 

ListModelMixin

.list(request, *args, **kwargs)메서드를 제공하여 쿼리셋의 목록을 표시한다.

쿼리셋이 채워져 있으면 200 OK응답을 반환하고, 페이지네이션을 설정할 수 있다.

 

 

CreateModelMixin

.create(request, *args, **kwargs)메서드를 제공하여 새 모델 인스턴스를 생성하고 저장하는 역할을 한다.

객체가 생성되면 응답 본문에 객체의 시리얼라이즈화된 표현과 201 Created응답을 반환한다. 만약 시리얼라이즈에 url키가 포함되어 있다면 응답시 Location 헤더가 해당 값으로 채워진다.

객체를 생성하기 위해 요청된 데이터가 유효하지 않을 경우 400Bad Request 응답을 반환한다. 응답 본문에는 400 Bad request가 반환된다.

 

 

RetrieveModelMixin

.retrieve(request, *args, **kwargs)메서드를 제공하여 응답에서 존재하는 기존 모델 객체를 반환한다.

객체를 검색할 수 있는 경우에는 응답의 본문에 객체의 직렬화괸 표현과 200 OK 응답을 반환한다. 그렇지 않을 경우 404 Not Found가 반환된다.

 

 

UpdateModelMixin

.update(request, *args, **kwargs)메서드를 제공하여 기존의 모델 인스턴스를 업데이ㅡ하여 저장한다.

.partial_update (request, *args, **kwargs)메서드를 제공하여 모든 필드가 선택사항으로 부분변경이 가능하다. 이때 요청은 HTTP PATCH requests여야 한다.

성공하면 200 OK, 실패하면 404 NOT FOUND 가 리턴된다.

 

 

DestroyModelMixin

.destroy(request, *args, **kwargs) 메서드를 제공하여 기존 모델 인스턴스를 삭제한다.

성공하면 200 OK, 실패하면 404 NOT FOUND 가 리턴된다.