🔍 회원가입 시 비밀번호가 8-20자이고 하나이상의 영문자, 숫자, 특수문자를 포함하도록 설정하는 정규식
import re #정규식 처리 모듈
class UserSerializer(serializers.ModelSerializer):
password2 = serializers.CharField(style={'input_type':'password'}, write_only=True)
class Meta:
model = User
fields=['email', 'username', 'password','password2', 'usd']
def validate(self, data):
password = data['password']
password2 = data['password2']
# username의 길이가 8자가 넘을 때 예외처리
if len(data.get("username", "")) > 8:
raise serializers.ValidationError(
detail={"username": "username은 8자리 이하로 설정해주세요."})
# password 생성 조건 (8-20자이며 최소 하나 이상의 영문자, 숫자, 특수문자가 필요)
if password == None:
raise serializers.ValidationError(
detail={"password": "비밀번호는 8-20자이며 최소 하나 이상의 영문자, 숫자, 특수문자가 필요합니다."}
)
# 패스워드 조건 불일치(정규식 표현)
if not re.search(r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$',password):
raise serializers.ValidationError(
detail={"password": "비밀번호는 8-20자이며 최소 하나 이상의 영문자, 숫자, 특수문자가 필요합니다."}
)
# 패스워드 재확인
if password != password2:
raise serializers.ValidationError(
detail={"password": "password가 불일치합니다! 다시 확인해주세요"}
)
return data
r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[@$!%*#?&])[A-Za-z\d@$!%*#?&]{8,}$'
-> 정규식에 대해 공부해볼 것!
'TIL(Today I Learned)' 카테고리의 다른 글
221129 TIL (0) | 2022.11.30 |
---|---|
221128 TIL (0) | 2022.11.28 |
221124 TIL (0) | 2022.11.24 |
221123 TIL (0) | 2022.11.23 |
221122 TIL (0) | 2022.11.23 |