현제의 현재이야기

[OSOD] 닉네임 중복 검사, Password Reset template 본문

DRF/OSOD

[OSOD] 닉네임 중복 검사, Password Reset template

현재의 현제 2023. 3. 7. 23:26

중복 검사

class UserSerializer(RegisterSerializer):
    nickname = serializers.CharField(max_length=50)
    name = serializers.CharField(max_length=50)
    subscription = serializers.BooleanField(default=False)

    class Meta:
        model = User
        fields = ['email', 'password', 'nickname', 'name', 'subscription']

    def validate(self, data):
        nickname = data['nickname']
        if User.objects.filter(nickname=nickname).exists():
            raise serializers.ValidationError({"nickname": "닉네임이 이미 사용중입니다."})
        return data
    
    def get_cleaned_data(self):
        super(UserSerializer, self).get_cleaned_data()
        return {
            'email': self.validated_data.get('email', ''),
            'password1': self.validated_data.get('password1', ''),
            'password2': self.validated_data.get('password2', ''),
            'nickname': self.validated_data.get('nickname', ''),
            'name': self.validated_data.get('name', ''),
            'subscription': self.validated_data.get('subscription', ''),
        }
    
    def save(self, request):
        adapter = get_adapter()
        user = adapter.new_user(request)
        self.cleaned_data = self.get_cleaned_data()
        user.nickname = self.cleaned_data.get('nickname')
        user.name = self.cleaned_data.get('name')
        user.subscription = self.cleaned_data.get('subscription')
        user.save()
        adapter.save_user(request, user, self)
        return user
  • nickname은 unique 필드이라 유저가 중복된 nickname을 넣고 회원가입을 하면 오류가 뜬다.
  • 근데 500 error보다는 예외처리를 통해서 어떤 것 때문에 회원가입이 되지 않는지 알 필요가 있다.
  • def validate 함수를 오버라이딩하여서 해당 nickname을 가진 유저가 있는지 검사한다.

template 적용

이것 또한 회원가입 이메일과 같이 온갖 똥꼬쇼를 하다가 발견했다. 전과 같은 경로에서 각각

password_reset_key_message.html

password_reset_key_subject.txt

를 생성하고 작성해주면 된다.

어떻게 알았냐면 기존 패키지인 allauth에서 password_reset 이메일 관련 파일들이 해당경로에 위치해 있었어서 힌트를 얻었다.

그래서 이 경로에 그대로 넣었더니 적용이 됐다.ㅎㅎ 드디어 해결 완료.

임시로 만든 template이지만 예쁘지 않음?? 마음에 든다.

Comments