Project: westagram -1 (21.05.27)

Tasic·2021년 5월 28일

wecode project

목록 보기
1/6
post-thumbnail

👍 오늘 한일

  1. 프로젝트 세팅
  2. 트렐로 세팅
  3. Mission2 과제 진행 - 회원가입 엔드포인트 만들기
    • 회원가입 model만들기 (완료)
    • 회원가입 url설정 (완료)
    • 회원가입 view만들기 (진행중)

📄 트렐로 세팅

  1. Mission : 단계별 과제
  2. 할일 : 각 Mission에서 할일을 작은 단위로 나눔
  3. 진행중 : 진행중인 일
  4. 완료 : 완료한 일
  5. 참고사항 : 프로젝트를 하면서 참고한 자료들

❗️ Mission2 - 회원가입 엔드포인트

📦 Model

  1. 회원가입 할 때에는 사용자 계정으로 이메일을 필수로 필요합니다.
  2. 회원가입 할 때에는 비밀번호도 필수로 필요합니다.
  3. 회원가입 할 때 핸드폰 번호닉네임추가로 저장합니다.
  4. 회원가입시 서로 다른 사람이 같은 전화번호사용자 이름, 이메일을 사용하지 않으므로 기존에 존재하는 자료와 중복되어서는 안됩니다.

여기서 무조건 입력되어야 되는 정보는 이메일, 비밀번호 이고, 핸드폰번호, 닉네임 입력이 안되도 되는 정보로 판단 하였다.

🔗 Modeling-aquerytool
비밀번호 : 4d8t2b

  • 이메일 (필수) - 중복 x
  • 비밀번호 (필수)
  • 핸드폰 번호 - 중복 x / null 허용
  • 닉네임 - 중복 x / null 허용

Result

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"

📝 View

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 받는 부분

data         = json.loads(request.body)
email        = data['email']
password     = data['password']
nickname     = data.get('nickname')
phone_number = data.get('phone_number')

전송 Data 변환

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)

정규 표현식의 경우 아직 익숙하지 않아서 완벽하지 않다. 좀더 고민해봐야겠다.
그 외의 에러가 발생하는 경우가 있는지 체크 중이다.

✏️ Note

None은 그자체로 Fales인데 익숙하지 않아서 아래와 같이 실수를 하였다.

🔗 if 조건문의 동작 방식 알아보기

if nickname != None:  # Bed
if nickname:          # Good

🤔 고민 사항

로직내에서 중복 체크를 하는데, 필드에 unique, blank 를 설정할 이유가 있을까에 대한 고민이 있다.

SQL 성능에 영향에 따라서 사용 유무를 정하면 될 것 같은데, 관련내용을 찾아보니 원하는 내용을 찾을 수 없었다.

기본키 vs unique 🔗 참고
기본키가 없는 상태에 unique 없을때 vs unique 있을때 🔗 참고

profile
블로그 옮겼습니다 (https://jotasic.github.io)

0개의 댓글