.png)

- 회원가입 할 때에는 사용자 계정으로
이메일을 필수로 필요합니다.- 회원가입 할 때에는
비밀번호도 필수로 필요합니다.- 회원가입 할 때
핸드폰 번호와닉네임도추가로 저장합니다.- 회원가입시 서로 다른 사람이 같은
전화번호나사용자 이름,이메일을 사용하지 않으므로 기존에 존재하는 자료와중복되어서는 안됩니다.
여기서 무조건 입력되어야 되는 정보는 이메일, 비밀번호 이고, 핸드폰번호, 닉네임 입력이 안되도 되는 정보로 판단 하였다.
🔗 Modeling-aquerytool
비밀번호 : 4d8t2b

class User(models.Model):
email = models.EmailField(max_length=50, unique=True, null=False, blank=False)
password = models.CharField(max_length=30, null=False, blank=False)
nickname = models.CharField(max_length=40, unique=True, null=True, blank=False)
phone_number = models.CharField(max_length=13, unique=True, null=True, blank=False)
class Meta:
db_table = "users"
1. 이메일이나 패스워드 키가 전달되지 않았을 시, {"message": "KEY_ERROR"}, status code 400 을 반환합니다. [완료 👍]
2. 회원가입시 이메일을 사용할 경우, 이메일에는 @와 .이 필수로 포함되어야 합니다. 해당 조건이 만족되지 않을 시 적절한 에러를 반환해주세요. 이 과정을 email validation이라고 합니다.
3. 회원가입시 비밀번호는 8자리 이상이어야만 합니다. 해당 조건이 만족되지 않을 시, 적절한 에러를 반환해주세요. 이 과정을 password validation이라고 합니다.
4. 회원가입시 서로 다른 사람이 같은 전화번호나 사용자 이름, 이메일을 사용하지 않으므로 기존에 존재하는 자료와 중복되어서는 안됩니다. 적절한 에러를 반환해주세요. [완료 👍]
5. 회원가입이 성공하면 {"message": "SUCCESS"}, status code 201을 반환합니다.
6. [추가 구현 사항] -> email validation 또는 password validation 과정에서 정규식을 사용해보세요.
data = json.loads(request.body)
email = data['email']
password = data['password']
nickname = data.get('nickname')
phone_number = data.get('phone_number')
Json형태로 Data들 넘어 오는데, View쪽에서 json라이브러를 사용하여 Dictionary 형태로 변환 하였다.
필수 정보인 email, password를 Key값으로 접근해서 존재하지 않을 시, KeyError가 나도록 유도 하여, 예외처리를 할 수 있도록 하였다.
닉네임과 전화번호는 추가 입력사항 이므로 KeyError가 나면 안된다. 그래서 get() 을 이용해서 해당 Key가 없을 시, 각 변수에 None값이 들어가도록 유도하였다.
validation을 처음부터 추가 구현 사항에 써있는 정규표현식을 이용해서 구현하기로 하였다.
추가 정보의 경우 입력이 되었을때만(None이 아닐경우) validation을 하도록 하였다.
if nickname:
if not re.compile(NICKNAME_REGEX).match(nickname):
return JsonResponse({"result": "INVALIED_PHONE_NUMBER"}, status=400)
if User.objects.exists(nickname=nickname) :
return JsonResponse({"result": "DUPLICATED_NICKNAME"}, status=400)
if phone_number:
if not re.compile(PHONE_REGEX).match(phone_number):
return JsonResponse({"result": "INVALIED_PHONE_NUMBER"}, status=400)
if User.objects.exists(phone_number=phone_number) :
return JsonResponse({"result": "DUPLICATED_PHONE_NUMBER"}, status=400)
정규 표현식의 경우 아직 익숙하지 않아서 완벽하지 않다. 좀더 고민해봐야겠다.
그 외의 에러가 발생하는 경우가 있는지 체크 중이다.
None은 그자체로 Fales인데 익숙하지 않아서 아래와 같이 실수를 하였다.
if nickname != None: # Bed
if nickname: # Good
로직내에서 중복 체크를 하는데, 필드에 unique, blank 를 설정할 이유가 있을까에 대한 고민이 있다.
SQL 성능에 영향에 따라서 사용 유무를 정하면 될 것 같은데, 관련내용을 찾아보니 원하는 내용을 찾을 수 없었다.
기본키 vs unique 🔗 참고
기본키가 없는 상태에 unique 없을때 vs unique 있을때 🔗 참고