2026/04/13

김기훈·2026년 4월 13일

TIL

목록 보기
189/194

Signup

serializer

from rest_framework import serializers

from apps.User.models import User


class UserSignupSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username', 'password', 'nickname']
        # 비밀번호 필드는 쓰기 전용으로 설정하여 데이터 조회 시에는 노출되지 않도록 보안을 강화
        extra_kwargs = {'password': {'write_only': True}} 

Service

from apps.User.models import User

def create_new_user(validated_data):
    user = User.objects.create_user(
        username=validated_data['username'],
        password=validated_data['password'],
        nickname=validated_data.get('nickname', '')
    )
    return user

view

class UserSignupView(APIView):
    @extend_schema(
        tags=["회원관리"],
        summary="회원가입",
        request=UserSignupSerializer,
    )
    def post(self, request):
        # 1. 입력 데이터 검증
        serializer = UserSignupSerializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        # 2. 서비스 레이어 호출
        user = SignupService.create_new_user(serializer.validated_data)

        return Response(
            {
                "message": "회원가입이 성공적으로 완료되었습니다.",
                "user": {"id": user.id, "username": user.username, "nickname": user.nickname},
            },
            status=status.HTTP_201_CREATED,
        )

결과 확인

profile
안녕하세요.

0개의 댓글