현제의 현재이야기
[OSOD] 닉네임 중복 검사, Password Reset template 본문
중복 검사
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이지만 예쁘지 않음?? 마음에 든다.
'DRF > OSOD' 카테고리의 다른 글
[OSOD] 자동 메일 api, Apscheduler (0) | 2023.04.09 |
---|---|
[OSOD] 출시와 보완 기록 (0) | 2023.03.23 |
[OSOD] Django Rest Framework + React Google social login (1) | 2023.03.05 |
[OSOD] Non-serializer (0) | 2023.02.20 |
[OSOD] DRF URL 파라미터 추출과 쿼리 파라미터 추출에 대한 고찰 (0) | 2023.02.19 |
Comments