Generics
Generic View
동작 순서
class RegisterView(generics.CreateAPIView):
queryset = Member.objects.all()
permission_classes = (AllowAny,)
serializer_class = RegisterSerializer
RegisterSerializer 자동 호출 구조
- 클라이언트가
POST /member/register/로 요청을 보냄 CreateAPIView는 내부적으로.post()->.create()->serializer.is_valid()->serializer.save()흐름을 자동 실행함- 이때 다음 순서로
RegisterSerializer가 호출됨:
호출 흐름 상세
serializer = RegisterSerializer(data=request.data)-> 요청 데이터(JSON)를 serializer에 전달serializer.is_valid-> 내부적으로validate()호출됨
def validate(self, attrs):
if attrs['password'] != attrs['password2']:
raise serializers.ValidationError({"password":"Password fields didn't match"})
return attrs
serializer.save()-> 내부적으로create(validated_data)호출됨
def create(self, validated_data):
member = Member.objects.create(
username=validated_data['username'],
email=validated_data['email'],
)
member.set_password(validated_data['password'])
member.save()
return member
결론
RegisterSerializer 안의 validate() 와 create()는 직접 호출하지 않아도, CreateAPIView의 기본 흐름 안에서 자동 실행됨.
이것이 바로 DRF의 핵심적인 “자동처리” 철합임.
genetics.CreateAPIView
새로운 리소스를 생성하는데 특화된 APIView
하는 일
- HTTP POST 요청만 처리함
.create()메서드를 자동 호출함 (내부적으로 serializer를 통해 객체 생성)- 예: 사용자 등록, 글 작성, 댓글 생성 등 “추가(create)” 동작에 딱 맞음
내부적으로 하는 일
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
정리: DRF: CreateAPIView 기본구조
from rest_framework import generics
from myapp.models import User
from myapp.serializers import UserSerializer
class UserCreateView(generics.CreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer