본문 바로가기

코딩

메소드 > perform_create(); 생성을 실행하라!

728x90
반응형

 

 

perform_create() 메서드는 Django REST framework의 ModelListCreateAPIView 클래스에서 데이터를 저장하는 작업을 커스터마이징할 때 사용된다.


기본 역할

perform_create() 메서드는 POST 요청으로 새로운 객체를 생성할 때 저장 로직을 커스터마이징할 수 있도록 제공된다. 기본적으로 serializer의 save() 메서드를 호출해 데이터베이스에 객체를 저장한다.


메서드 구조

perform_create()는 다음과 같은 구조를 가지고 있다:

python
Copy code
def perform_create(self, serializer): serializer.save()
  • serializer : 유효성 검사를 통과한 시리얼라이저 객체이다.
  • serializer.save() : 객체를 데이터베이스에 저장하는 메서드.

왜 perform_create()가 필요한가?

  1. 저장 전 추가 데이터: 객체를 저장하기 전에 요청자의 정보나 추가 데이터를 포함시킬 수 있다.
  2. 커스터마이징: 단순히 serializer.save()를 호출하는 대신 로직을 추가하거나 수정할 수 있다.
  3. 유지보수: 로직을 perform_create()에서 관리하면 코드가 분리되어 유지보수가 쉬워진다.

사용 예제

아래는 perform_create()를 사용해 요청자의 사용자 정보를 추가하는 예제이다.

views.py

python
Copy code
from rest_framework.generics import ListCreateAPIView from rest_framework.permissions import IsAuthenticated from .models import Post from .serializers import PostSerializer class PostListCreateAPIView(ListCreateAPIView): queryset = Post.objects.all() serializer_class = PostSerializer permission_classes = [IsAuthenticated] # 인증된 사용자만 접근 가능 def perform_create(self, serializer): # 현재 로그인한 사용자를 author로 추가 serializer.save(author=self.request.user)

설명

  1. perform_create():
    • serializer.save(author=self.request.user)를 호출해, 현재 요청을 보낸 사용자를 author 필드에 저장한다.
  2. 저장 전 커스터마이징: 데이터를 저장하기 전에 필요한 추가 정보를 넣는 로직을 수행할 수 있다.

확장된 예제: 추가적인 로직

perform_create()를 사용하면 데이터 저장 전 검증 로직이나 로깅을 추가할 수도 있다.

python
Copy code
def perform_create(self, serializer): # 저장 전 추가 검증 if self.request.user.is_banned: raise PermissionDenied("계정이 정지된 사용자입니다.") # 로그 출력 print("새로운 객체가 생성됩니다:", serializer.validated_data) # 데이터 저장 serializer.save(created_by=self.request.user)

정리

  • **perform_create()**는 객체를 생성할 때 커스터마이징된 저장 로직을 추가할 수 있도록 제공된다.
  • 주로 추가 데이터 저장이나 검증 로직 추가에 사용된다.
  • 기본적으로 serializer.save()를 호출하지만, 이를 원하는 형태로 확장하거나 수정할 수 있다.
728x90
반응형