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()가 필요한가?
- 저장 전 추가 데이터: 객체를 저장하기 전에 요청자의 정보나 추가 데이터를 포함시킬 수 있다.
- 커스터마이징: 단순히 serializer.save()를 호출하는 대신 로직을 추가하거나 수정할 수 있다.
- 유지보수: 로직을 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)
설명
- perform_create():
- serializer.save(author=self.request.user)를 호출해, 현재 요청을 보낸 사용자를 author 필드에 저장한다.
- 저장 전 커스터마이징: 데이터를 저장하기 전에 필요한 추가 정보를 넣는 로직을 수행할 수 있다.
확장된 예제: 추가적인 로직
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
반응형
'코딩' 카테고리의 다른 글
| perms_map < permissions < REST Framework (1) | 2024.12.19 |
|---|---|
| 'validate_'; django REST framework 예약어 (4) | 2024.12.18 |
| Reverse URL 만들기 < viewsets + router 환경에서 (2) | 2024.12.16 |
| viewsets, REST Framework (2) | 2024.12.16 |
| Authentication, Authorization; 에버랜드 입장권과 이용권 (2) | 2024.12.16 |