Django에서의 첫번째 작동 api를 구현해보았다.
바로바로 회원가입 api
일단 회원가입 api 구현전 기본적인 회원가입 포로세스를 생각해 볼 필요가 있었다.
- 기본정보 입력
- 비밀번호 입력
- 기본정보 존재 유무 확인
- 생성 완료
이렇게 크게 네가지의 기본 기능의 작동이 되어야한다. 물론 의뢰에 따라 기본정보의 항목들과 입력 규칙이 다를 것이다. 이번 구현에 받은 의뢰는
- 필수 입력 : email, password
- 선택입력 : id(닉네임의 개념), 전화번호
- 데이터베이스 추가 항목 : 생성 시간, 변경 시간
그렇다면 로직을 짤때 중점으로 생각할 것은
일단 그럼 회원가입을 받기위한 필드를 설정하고 데이터 베이스를 만들었다.
여기서 필드는 총 6가지로 회원가입 정보 사항 4가지와 생성 시간과 변경시간 필드 2가지다.
필수로 입력 사항은 email임으로 account와 phone의 null값을 허용하였다. 하지만 여기서 email 또한 null값을 지정한 이유는 views를 통해 email을 미입력시 "EMAIL 미입력"에러를 따로 리턴하기 위해서이다. 이렇게 하지 않고 false로 놔둔다면 KEYERROR가 뜰 것이라고 생각 하였기 때문이다.
email 필드는 email validation을 적용시키기 위해 EmailField를 적용시켰다.
DateTimeField 같은 경우 옵션을 auto_now_add를 주게 되면 생성 시간을 기록해준다. 다음 auto_now 옵션은 update시 매번 갱신되게 된다. 마지막으로 수정된 시간을 트래킹하기 좋은 필드다.
Django DateTimeField aout_now 공식 문서
뷰를 작성하기 위해서는 일단 SignupView 클래스를 생성하였다.
💡
SignupView로 생성전 기본 django startapp 이름인 UserView로 회원가입 뷰를 정의했었다. 이 부분은 코드를 짜는 사람은 이해하지만, 모두가 직관적으로 알아들을 수 있는 작명을 하는 것이 좋다는 리뷰를 받았다. 가독성에서 선언시 이름이 매우 중요하다는 것을 간과한 부분이 였다.
일단 try문을 통해 예상치 못한 에러를 먼저 잡고 시작하였다.
user값에 일단 User class 필드별로 받은 정보를 저장하고 시작하였다.
나중에 모든 조건이 맞다면 save()하기 위해서이다.
💡
그냥 변수 저장만하고 create만 하여도 되지만, 향후 업데이트를 하기 좋은 형식이기 때문이다.
💡
기존에는 data.get 메소드가 아닌 데이터의 딕셔너리값을 키값으로 바로 불러오는 data['key']를 사용하였다. 틀린 방법은 아니지만 현재 변수들로 입력할 필드들 중 null값이 허용된 필드들이 있고 또한, 정보를 미입력시 해당 변수들이 정의되지 않아 오류가 발생한다. 이를 방지하기 위해 불러올 값이 없으면 None값을 부여하는 get함수에 없을시 부여하는 옵션을 주었다. 참고로 불러들일 값이 없을시 None이 아닌 다른값을 부여하고 싶으면 옵션에 부여하고 싶은 값을 입력하면 된다.>>>data.get['key','부여하고_싶은_값']#key 값이 없을 시 >>>부여하고_싶은_값 #예: 1을 부여하고 싶다면 >>>data.get['key',1]#key 값이 없을 시 >>>1
값을 불러 변수에 지정한 다음 이제 필요한 조건들을 작성하여 회원가입의 규칙을 정해주었다.
💡
마지막 조건문은 이메일 형식에 @와 .이 없으면 유효하지 않은 이메일임을 나타내기 위한 용도이다. 이는 앞선 email 입력 조건과 중복된 작업을 하기 때문에 비효율적인 작업이다. 삭제하는 것이 바람직해 보인다.
마지막으로는 모든 조건을 충족하는 유효한 회원가입 형식을 갖춘 요청이라면 임시로 입력한 user를 저장하여 데이터베이스로 보내고 성공이라는 Jsonresponse 응답을 보낸다.
💡
또한 만약 try문이 성공적으로 이루어지지 못해 return값을 못 보낸다면 예상치 못한 에러가 발생하여 keyerror를 리턴한다. 이는 예상치 못한 값이긴 하지만 최대한 많은 에러를 리턴할 수 있도록 준비를 하는 것이 바람직하다.