Django rest framework에서
아래와 같이 username 대신 email을 키로 갖는 유저테이블을 정의했다.
```
class User(AbstractUser):
username = None
email = Emailfield(unique=True)
```
그리고 serializer를 이용해서 validation 체크를 하려고 했다.
```
class SignupSerializer(ModelSerializer):
class Meta:
model = User
field = ("email",)
def validate_email(self, email):
return email.lower()
```
위와같이 validation 함수에는 이메일을 소문자로 치환하는 로직만 넣어줬다.
view단에서 이메일 중복체크를 하려고 했다.
```
class SignupView(GenericAPIView):
serializer_class = SignupSerializer
def post(self, request):
serializer = self.get_serializer(data = request.data)
serializer.is_valid(raise_exception = True)
...
```
위와 같이
이메일 중복체크를 아직 하지 않았음에도 불구하고,
serializer.is_valid()에서 중복체크를 해준다.
아무리 찾아봐도 관련 docs를 찾지 못했다. stackoverflow에서 비슷한 질문이 있었지만
원하는 답변이 없다. (https://stackoverflow.com/questions/64029496/validate-unique-email-django-rest-framework-serializer)
아마 내부적으로
unique field에 자동으로 rest_framework.validators.UniqueValidator
를 붙여주는게 아닐까 싶다.
혹시 관련해서 아는 내용이 있으면 댓글 부탁드립니다.
No comments:
Post a Comment