_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

woncoding/TIL

TIL | 11.3.목 [Django : DRF]

2022. 11. 4. 16:22

- Django Rest Framework

 

[Custom User]

Django 에서는 기본적으로 사용자 모델인 User 모델을 제공하고 있다.

하지만 임의로 원하는 필드(ex. 닉네임이나 생일 등)를 가진 사용자 모델을 사용하기 위해서는 custom user 모델을 구현할 수 있다.

 

 

- Custom User | models.py

  • custom user 모델을 구현하기 위해서는 
  1. BaseUserManager와 
  2. AbstractBaseUser 클래스를 상속받아 새롭게 구현해야 한다.

-> from django.contrib.auth.models import BaseUserManager, AbstractBaseUser

  • BaseUserManager : 유저를 생성하는 역할을 하는 헬퍼 클래스이고,  
  • AbstractBaseUser : 실제 모델이 상속받아 생성하는 클래스입니다.

 

1-1) class UserManager(BaseUserManager):

  • create_user와 create_superuser 함수를 통해 일반 user와 관리자 user 객체를 생성하는 코드를 작성해주었습니다. (is_admin의 차이)

 

1-2) class User(AbstractBaseUser):

  • 사용자 모델에 필요한 field를 작성해주었고, USERNAME_FIELD, REQUIRED_FIELDS를 설정해주었습니다.
  • 참고로 is_active와 is_admin field는 Django User 모델의 필수 field
    •     is_active = models.BooleanField(default=True)    
    •     is_admin = models.BooleanField(default=False)

👉 이후, 정의된 커스텀 유저 모델을 장고 어드민 으로 등록해줘야 한다.

 

 

 

 

 

- Custom User | serializers.py

이렇게 models.py 에서 custom user model을 만들었으면 → serializers.py에서 json형태로 입력 받을 fileds를 정의해준다.

+ UserSerializer에서는 주의해야 할 점은, 바로 create 시 (회원가입 시) 입력받은 데이터를 검증해주어야 한다.

   (유효하지 않은 값의 입력을 방지하기 위해)

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = "__all__"   # user 모델에서 정의한 objects들 다 가져오고

    def create(self, validated_data):   # 유저 생성시 입력받은 데이터를 검증
        user = super().create(validated_data)
        password = user.password
        user.set_password(password)
        user.save()
        return user

 

 

 

 

 

- Custom User | views.py

serializers.py 에서 생성된 객체의 정보를 json형태로 받아왔으면, views.py 에서 해당 정보를 이용해 서버에서 어떻게 써먹을지 정의해줘야 됨

 

class UserView(APIView):
    def post(self, request):
        serializer = UserSerializer(data=request.data)  # serializers.py에서 정의된 class 를 이용한다.
        if serializer.is_valid():
            serializer.save()
            return Response({"message":"가입완료!"}, status=status.HTTP_201_CREATED)
        else:
            return Response({"message":f"${serializer.errors}"}, status=status.HTTP_400_BAD_REQUEST)

 

 

 


 

 

[참고 링크]

https://docs.djangoproject.com/en/4.1/topics/auth/customizing/

https://wisdom-990629.tistory.com/44

저작자표시 비영리 변경금지 (새창열림)

'woncoding > TIL' 카테고리의 다른 글

TIL | 11.7.월 [Django : DRF]  (0) 2022.11.09
TIL | 11.4.금 [Django : DRF]  (0) 2022.11.08
TIL | 11.2.수 [AWS]  (0) 2022.11.04
TIL | 11.1.화 [AWS]  (0) 2022.11.03
TIL | 10.31.월 [Django : DRF]  (0) 2022.10.31
    'woncoding/TIL' 카테고리의 다른 글
    • TIL | 11.7.월 [Django : DRF]
    • TIL | 11.4.금 [Django : DRF]
    • TIL | 11.2.수 [AWS]
    • TIL | 11.1.화 [AWS]
    _won_
    _won_
    Coding Practice blog

    티스토리툴바