회원가입 기능을 구현하기 위해서 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