[Westagram] Mission3 : 회원가입

이태연·2021년 11월 27일
0

[Mission3] 회원가입 기능 구현

회원가입 기능을 구현하기 위해서 try,except문을 사용하여 조건을 주고 조건에 맞지 않으면 error가 발생하도록 작성하였습니다.

이메일에는 @.이 필수로 포함되고, 비밀번호는 8자리 이상, 문자,숫자,특수문자의 복합이 되게하기 위해서 정규표현식을 사용하였습니다. 그리고 입력되는 email/password와 비교하여 조건에 맞지 않으면 ValidaitonError가 발생하도록 작성하였습니다.

REGEX_EMAIL    = r'^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
REGEX_PASSWORD = r'^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$'

class SignUpView(View) :
    def post(self, request) :

        try:
            data     = json.loads(request.body)
            email    = data['email']
            password = data['password']

            if not re.match(REGEX_EMAIL, email) :
                raise ValidationError('email format is not valid')

            if not re.match(REGEX_PASSWORD, password) :
		raise ValidationError('password format is not valid') 

회원가입시 서로 다른 사람이 같은 이메일을 사용하지 않으므로 filter를 사용하여 새로 입력되는 email과 DB에 있는 email을 비교하여 이미 존재한다면 ValidationError가 발생하도록 하였습니다.

if User.objects.filter(email = email).exists() :
	raise ValidationError('Email already exists')

회원가입이 성공하면 이름,이메일,비밀번호,연락처(휴대폰),닉네임이 만들어지고 성공메세지와 status code 201이 반환되도록 작성하였습니다.

           User.objects.create(
                name     = data['name'],
                email    = data['email'],
                password = data['password'],
                phone    = data['phone'],
                nickname = data.get('nickname', '')
            )

            return JsonResponse({"message" : "SUCCESS"}, status=201)  

이메일이나 패스워드가 전달되지 않을 경우 KEYERROR메세지와 status code 400이 반환됩니다.

except KeyError :
	return JsonResponse({"message" : "KEY_ERROR"}, status = 400) 
        

ValidationError의 경우 as e: 를 사용하여 각각의 상황에 맞는 메세지가 전달되로록 작성하였습니다.

except ValidationError as e :
	return JsonResponse({"message" : e.message}, status = 400) 

전체 코드는 다음과 같습니다.

정규표현식으로 비교한 부분을 validation.py로 따로 빼서 모듈화하는 작업을 진행했습니다.
validation.py

views.py

profile
주니어 백엔드 웹 개발자입니다.

0개의 댓글