이메일,패스워드 검증

김혁준·2023년 6월 19일
0

django

목록 보기
9/18
 def validate_password(self, password):
        """비밀번호 유효성 검사"""
        if len(password) < 8:
            raise ValidationError("비밀번호는 8자리 이상이어야 합니다.")
        if not re.search(r"[a-zA-Z]", password):
            raise ValidationError("비밀번호는 하나 이상의 영문이 포함되어야 합니다.")
        if not re.search(r"\d", password):
            raise ValidationError("비밀번호는 하나 이상의 숫자가 포함되어야 합니다.")
        if not re.search(r"[!@#$%^&*()]", password):
            raise ValidationError("비밀번호는 적어도 하나 이상의 특수문자(!@#$%^&*())가 포함되어야 합니다.")
        return password

    def validate_email(self, email):
        email_regex = re.compile(
            r"^[a-zA-Z]+[!#$%&'*+-/=?^_`(){|}~]*[a-zA-Z0-9]*@[\w]+\.[a-zA-Z0-9-]+[.]*[a-zA-Z0-9]+$"
        )
        email_validation = email_regex.match(email)
        if not email_validation:
            # 알파벳 대/소문자로 시작. 특수문자로 마무리 안됨. @와 .이 포함되었는지 확인
            raise ValidationError("이메일 형식이 올바르지 않습니다!")
        return email

    def create(self, validated_data):
        password = validated_data.pop("password")
        email = validated_data.pop("email")
        self.validate_password(password)
        self.validate_email(email)
        user = User(**validated_data, email=email)
        user.set_password(password)
        user.save()

password 또는 Email을 리턴하지 않으면 Validated_data 에서 None이 된다. 커스텀 검증할때 장고에서 미리 설정해준듯.

profile
스프링 개발자 지망생입니다

0개의 댓글