create
가 perform_create
의 상위집합(Superset)과 같다고 이해하면 쉽다.
perform_create
는 기본적으로 create
내에 포함되는 메서드로, 객체가 성공적으로 생성되었을 때 호출된다. 따라서 해당 메서드 내에서 예외가 발생해도 perform_create
는 호출되기 전의 상태로 롤백해주지 않는다. 만약 예외가 발생했을 때 적절한 응답을 반환받고 싶다면 perform_create
메서드 이전 단계에서 예외 처리를 해야 하며, 이 부분을 작업하기 위해서는 create
메서드를 오버라이딩 해야한다.
예외 처리 -> create
메서드를 오버라이드
예외가 발생하지 않을 때(즉, 정상적으로 처리되었을 때에만) -> perform_create
perform_create
에서는 대충 모델의 필드 값을 다른 새로운 값으로 update 한다거나... 그런식의 코드들이 들어갈 것이다. 그 외에 HTTP 반환 값이 401 인 경우에 어떤 json 메시지를 반환한다거나 하는 것은 perform_create
안에 암만 적어봐야 작동하지 않는다.
즉, create()
에서 정상 동작이 확인된 뒤에 save()
까지 포함되는 것이 perform_create()
라고 이해할 수 있겠다.
References
[Django REST Framework] create() vs perform_create()
Django REST Framework의 ModelViewSet과 create() 관련 찾아보고 공부한 내용을 정리해보려고 한다. 기본적으로 ModelViewSet은 GenericAPIView라는 클래스를 상속받기 때문에 .list(), .create() .list(), .create() 등을 기
jomuljomul.tistory.com