📌 Django OAuth 리팩토링 - 9편: 닉네임 설정 & 중복 확인 API

2025. 6. 13. 01:17·프로젝트

📌 Django OAuth 리팩토링 - 9편: 닉네임 설정 & 중복 확인 API

🔐 OAuth 이후 회원가입을 마무리하는 닉네임 등록 API와
✨ Swagger에 잘 나타나도록 한 GET/POST 중복확인 API까지 정리


🧭 1. 닉네임 설정 흐름

  1. 소셜 로그인 완료 후 email만 저장된 CustomUser 생성
  2. 사용자에게 닉네임 입력 화면 제공
  3. 닉네임을 API로 전송 → 중복 확인 → 등록 완료

🛠️ 2. 닉네임 설정 API

@extend_schema(request=NicknameSetSerializer)
@api_view(["POST"])
@permission_classes([AllowAny])
def set_nickname(request):
    serializer = NicknameSetSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    user = get_object_or_404(CustomUser, email=serializer.validated_data["email"])
    user.nickname = serializer.validated_data["nickname"]
    user.save()
    return Response({"message": "닉네임 설정 완료"})
class NicknameSetSerializer(serializers.Serializer):
    email = serializers.EmailField()
    nickname = serializers.CharField()

    def validate_nickname(self, value):
        if CustomUser.objects.filter(nickname=value).exists():
            raise serializers.ValidationError("이미 사용 중인 닉네임입니다.")
        return value

🔍 3. 닉네임 중복 확인 API (GET & POST 제공)

✅ GET 방식 (Swagger에서 쉽게 테스트 가능)

@extend_schema(
    parameters=[
        OpenApiParameter(
            name="nickname",
            required=True,
            type=OpenApiTypes.STR,
            location=OpenApiParameter.QUERY,
            description="중복 확인할 닉네임"
        ),
    ],
    responses={
        200: OpenApiResponse(
            description="사용 가능 여부 응답",
            examples=[
                {"name": "사용 가능", "value": {"is_available": True}},
                {"name": "사용 불가", "value": {"is_available": False, "detail": "이미 사용 중인 닉네임입니다."}},
            ]
        )
    },
    summary="닉네임 중복 확인 (GET)",
    description="닉네임이 사용 가능한지 GET 요청으로 확인합니다.",
)
@api_view(['GET'])
@permission_classes([AllowAny])
def check_nickname_get(request):
    serializer = NicknameCheckSerializer(data=request.query_params)
    if serializer.is_valid():
        return Response({'is_available': True}, status=status.HTTP_200_OK)
    return Response(
        {
            'is_available': False,
            'detail': serializer.errors.get('nickname', ['유효하지 않은 요청입니다.'])[0]
        },
        status=status.HTTP_200_OK
    )

✅ POST 방식 (프론트 연동 시 유용)

@extend_schema(
    request=NicknameCheckSerializer,
    responses={200: None},
    summary="닉네임 중복 확인 (POST)",
    description="닉네임이 사용 가능한지 POST 요청으로 확인합니다."
)
@api_view(['POST'])
@permission_classes([AllowAny])
def check_nickname_post(request):
    serializer = NicknameCheckSerializer(data=request.data)
    if serializer.is_valid():
        return Response({"available": True}, status=status.HTTP_200_OK)
    return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class NicknameCheckSerializer(serializers.Serializer):
    nickname = serializers.CharField()

    def validate_nickname(self, value):
        if CustomUser.objects.filter(nickname=value).exists():
            raise serializers.ValidationError("이미 사용 중인 닉네임입니다.")
        return value

🧪 4. Swagger UI에서 테스트 확인

  • GET /api/oauth/nickname/check-nickname/ → query param으로 확인
  • POST /api/oauth/nickname/check-nickname/ → JSON body로 확인
  • POST /api/oauth/nickname/ → 닉네임 최종 등록

✅ 마무리 흐름 요약

단계설명
소셜 로그인 이메일 정보만으로 유저 생성
닉네임 입력 요청 프론트에서 닉네임 입력 UI 제공
닉네임 중복 확인 GET/POST API로 가능 여부 확인
닉네임 설정 POST /nickname/ 으로 등록
 

'프로젝트' 카테고리의 다른 글

OAuth 회원가입/닉네임 등록 과정에서 만난 브레이킹 체인지 및 디버깅 기록  (1) 2025.06.13
📌 Django OAuth 리팩토링 - 10편: Swagger API 문서화 설정 & 실전 활용 팁  (2) 2025.06.13
📌 Django OAuth 리팩토링 - 8편: 닉네임 중복 확인 API 구축  (0) 2025.06.13
📌 Django OAuth 리팩토링 - 7편: 닉네임 중복 확인 API 구축  (0) 2025.06.13
📌 Django OAuth 리팩토링 - 6편: 닉네임 설정 API 리팩토링 (HTML Form → DRF API)  (0) 2025.06.13
'프로젝트' 카테고리의 다른 글
  • OAuth 회원가입/닉네임 등록 과정에서 만난 브레이킹 체인지 및 디버깅 기록
  • 📌 Django OAuth 리팩토링 - 10편: Swagger API 문서화 설정 & 실전 활용 팁
  • 📌 Django OAuth 리팩토링 - 8편: 닉네임 중복 확인 API 구축
  • 📌 Django OAuth 리팩토링 - 7편: 닉네임 중복 확인 API 구축
Chansman
Chansman
안녕하세요! 코딩을 시작한 지 얼마 되지 않은 초보 개발자 찬스맨입니다. 이 블로그는 제 학습 기록을 남기고, 다양한 코딩 실습을 통해 성장하는 과정을 공유하려고 합니다. 초보자의 눈높이에 맞춘 실습과 팁, 그리고 개발하면서 겪은 어려움과 해결 과정을 솔직하게 풀어내려 합니다. 함께 성장하는 개발자 커뮤니티가 되기를 바랍니다.
  • Chansman
    찬스맨의 프로그래밍 스토리
    Chansman
  • 전체
    오늘
    어제
    • 분류 전체보기 (807)
      • Python (32)
      • 프로젝트 (116)
      • 과제 (25)
      • Database (40)
      • 멘토링 (11)
      • 특강 (37)
      • 기술블로그 (42)
      • 기술블로그-Fastapi편 (33)
      • 기술블로그-Django편 (154)
      • 기술블로그-Flask편 (36)
      • AI 분석 (5)
      • HTML & CSS (31)
      • JavaScript (17)
      • AWS_Cloud (21)
      • 웹스크래핑과 데이터 수집 (14)
      • Flask (42)
      • Django (77)
      • Fastapi (16)
      • 연예 (14)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    chatgpterror
    livebroadcast
    trumpmuskclash
    btsjungkook
    life reflection
    newpoliticalparty
    travel ban
    americaparty
    remittance
    americanlaw
    classaction
    btscomeback
    college reunions
    self-growth
    youngprofessionals
    hotcoffeecase
    gpterror
    뷔
    titaniumcase
    smartphonedurability
    lawsuitculture
    homebartrend
    RM
    btsdischarge
    basalcellcarcinoma
    urbantrends
    bts
    btsreunion
    global politics
    chinanightlife
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Chansman
📌 Django OAuth 리팩토링 - 9편: 닉네임 설정 & 중복 확인 API
상단으로

티스토리툴바