후딱 개발하고자 필자는 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' 카테고리의 다른 글
[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 |
[Django] related_name 설정 (0) | 2022.10.07 |