숨밈
들숨에 건강을 날숨에 재력을
숨밈
전체 방문자
오늘
어제
  • 분류 전체보기 (55)
    • 💻 프로젝트 (8)
      • 🍝 홍잇 (5)
      • 🏕 캠퍼 (3)
    • 👩‍💻 개발 (30)
      • ⚙️ BACKEND (16)
      • 🖥 FRONTEND (3)
      • 📡 DEVOPS (7)
      • 💡SOFTWARE (4)
    • 📑 개발 이론 (13)
      • 🚎 JAVA (1)
      • 🌱 SPRING (12)
    • 📚 CS (2)
      • 🔎 Infra (2)
    • 📔 회고 (2)

블로그 메뉴

  • 홈
  • 태그
  • 글쓰기

인기 글

태그

  • static final
  • django-rest-auth
  • 스프링부트
  • jsp
  • Tistory
  • notion
  • django-auth
  • Django
  • 스프링
  • django-rest-auth_custom
  • springboot
  • 타임리프
  • querydsl
  • 프리코스
  • 자바스크립트

티스토리

hELLO · Designed By 정상우.
숨밈

들숨에 건강을 날숨에 재력을

👩‍💻 개발/⚙️ BACKEND

[Django] dj-rest-auth Custom

2022. 12. 22. 22:49

후딱 개발하고자 필자는 dj-rest-auth를 사용하였다!

필요한 필드를 추가 및 제거하기 위해 필자는 custom을 해줬다!

 

1. Register 필드 추가 

회원 가입 시 필드를 추가해 줘야 했다. (필수 필드)

# api/serializers.py

class RegisterCustomSerializer(RegisterSerializer):
    # 기본 설정 필드: username, password, email
    # 추가 설정 필드: team, part
    team = serializers.CharField()
    part = serializers.CharField()

    def get_cleaned_data(self):
        data = super().get_cleaned_data()
        data['team'] = self.validated_data.get('team', '')
        data['part'] = self.validated_data.get('part', '')
        return data

    def validate(self, data):
        super().validate(data)
        if not user_register_input_validation(data):
            raise serializers.ValidationError("Part or Team name is invalid")
        return data

위 코드는 추가할 필드를 선언해 준다.

get_cleaned_data = register전에 해당 데이터들을 비워준다.

validate = 기존 validate를 유지하되, 추가 필드들의 valid를 확인하여 준다. /  user_register_input_validation 은 생성 함수

 

serializer 만 적용하게 된다면 필드에 값을 넣어도 디비에 반영되지 않는다.

team = "" part="" 

 

그래서 아래와 같은 코드를 추가로 적용해 주어야 한다.

class CustomAccountAdapter(DefaultAccountAdapter):

    def save_user(self, request, user, form, commit=True):
        from allauth.account.utils import user_field

        # 기본 저장 필드: first_name, last_name, username, email
        user = super().save_user(request, user, form, False)
        # 추가 저장 필드: team,part
        user_field(user, 'team', request.data.get('team', ''))
        user_field(user, 'part', request.data.get('part', ''))
        user.save()
        return user

 

 

기존 adapter을 적용하되, 추가 필드를 user_field를 이용하여 추가한 필드 값을 저장해 준 뒤 save 해준다.

 

# settings.py 

ACCOUNT_ADAPTER = 'api.utils.adapters.CustomAccountAdapter'
REST_AUTH_REGISTER_SERIALIZERS = {
    'REGISTER_SERIALIZER': 'api.serializers.RegisterCustomSerializer',
}

위에 두 줄을 꼭!! settings.py에 적어주어야 한다.

 

2. userDetail 정보 custom

기존에 /api/auth/user을 치면 userdetail 정보가 json으로 출력되었는데 필요 없는 필드 (ex. first_name, second_name) 

같은 것들이 출력되었다.

# api/serializers.py

class UserDetailCustomSerializer(auth_serializers.UserDetailsSerializer):
    class Meta:
        model = User
        fields = ('pk', 'username', 'email', 'team', 'part')
        read_only_fields = ('username',)

위와 같이 커스터마이징 해주면 선언한 필드만 userDetail에 나오게 된다.

# settings.py

REST_AUTH_SERIALIZERS = {
    'USER_DETAILS_SERIALIZER': 'api.serializers.UserDetailCustomSerializer',
}

이것도 꼭 settings.py에 적어주어야 반영이 된다.

 

끝!

저작자표시 (새창열림)

'👩‍💻 개발 > ⚙️ BACKEND' 카테고리의 다른 글

[Spring/Batch] Step간 변수 공유 - ExecutionContext  (1) 2025.01.28
[Django] DRF JWT 회원가입, 로그인 기능/ dj-rest-auth  (0) 2022.12.22
[Django] DRF Method Override 방법  (1) 2022.10.08
[Django] ViewSet , Router  (4) 2022.10.08
[Django] admin 계정 생성  (0) 2022.10.08
    '👩‍💻 개발/⚙️ BACKEND' 카테고리의 다른 글
    • [Spring/Batch] Step간 변수 공유 - ExecutionContext
    • [Django] DRF JWT 회원가입, 로그인 기능/ dj-rest-auth
    • [Django] DRF Method Override 방법
    • [Django] ViewSet , Router
    숨밈
    숨밈
    기술블로그

    티스토리툴바