Django Instagram - Sign Up

jinatra·2021년 8월 25일
0

Django

목록 보기
4/9
post-thumbnail

Django Instagram - Sign Up


초기 세팅

항상 하던 대로 새로운 가상환경을 만들고 초기 세팅을 만진 후 시작


모델링 작성

회원가입과 로그인을 위한 app이므로 기본 정보들로만 이루어진 모델링을 아래와 같이 작성하였다.

password의 경우 나중에 bcrypt를 통해 salting과 key stretching 작업을 거쳐 암호화되어 길어질것이므로 DB에 저장될 최대 길이를 200자로 설정하였다.

--

Views.py 작성

회원가입 View 작성

회원가입을 위해 필요한 데이터를 아래와 같이 만들었다.
이메일과 패스워드 등에 규칙을 주려고 했고, 정규표현식을 사용하여 로직을 만들었다.
로직은 아래와 같다.

  • 이메일의 경우, @와 . 이 무조건 포함되어야 함
  • 비밀번호의 경우, 문자 하나, 숫자 하나, 특수문자 하나 이상 포함되어야 함
  • 핸드폰 번호의 경우, 각 자리마다 필요한 자리수가 포함되어야 함

간단히 코드 리뷰를 해보면,

  • 우선 json 타입과 정규표현식을 사용하기 위해 필요한 모듈 import
  • request될 데이터에 변수 지정(나중에 간단하게 선언하려는 의도도 있다.)
  • 위 조건에 맞춰서 각각 조건문으로 한번씩 걸러주고
  • 모든 조건이 달성 됐을 시 User 객체 생성 (+ 프론트가 볼 생성 메세지)
  • KeyError을 잡기 위해 try, except 활용

이정도가 될 듯 하다.


정규표현식 오류

처음 비밀번호 정규표현식을 작성할 때 -+_ 등을 썼는데, 해당 특수문자들은 뭔가 정규표현식 내에서 쓰는게 있는지 오류가 떴다.

-의 경우는 a-zA-Z0-9와 같이 범위를 지정해주는거라 뭔가 함부로 쓰면 안되는 듯 하다.

그래서 이메일에도 뒤에서 준 듯 하다.


이메일 중복 검사 (8/26 추가)

회원가입 시 이메일 중복을 막기 위한 로직을 추가한 것을 깜빡하여 급하게 추가하였다.

최종 코드는 아래와 같다.

  • Validation 검사들을 모두 마친 후,
  • sign_up_email과 동일한 이메일을 가지고 있는 객체가 DB에 있는지 exists()를 통해 검사

이메일 중복 검사 코드 오류 (8/26 추가)

exists() method를 사용하지 않고 해보고 싶어 아래와 같이 코드를 짰을 때,

  1. 중복된 이메일을 입력했을 땐 정상적으로 메시지 출력
  2. 새로운 이메일을 입력했을 땐 오류 메세지 출력

내가 생각하기에, get() 메소드를 쓸 때 객체가 없게 되면 Error가 반환되는 듯 하다.

filter() 메소드의 경우엔 객체가 없을 땐 빈 쿼리셋을 반환하지만, get() 메소드는 그렇지 않다.


urls.py 편집

app urls.py 편집

작성한 View를 받아올 앱의 urls.py을 아래와 같이 편집


main urls.py 편집

users app을 받아올 main urls.py를 아래와 같이 편집


마무리

오늘은 간단히 모델 설정과 회원가입 정도를 만들어보았고, 이제 회원가입을 통해 DB에 저장된 데이터와 비교하는 view도 만들어봐야할 듯 하다.





Take Away

많은 시행착오

위 코드를 짜기까지 여러가지 착오가 있었는데, 확실히 오류코드를 잘 보다보면 99%의 해답이 나오는듯 하다.
모르는건 구글링하면 되니..
유일하게 해결 못하고 삭제한게 정규표현식이었는데, 이건 더 공부를 해봐야겠다.
MDN을 계속 보는 습관을 들여야겠다.


get() 메소드와 filter() 메소드의 차이

이메일 중복 코드를 실험해보며 객체를 가져오는 두 메소드, get()filter()의 차이를 어느정도 알게 되었다.

가져오고자 하는 객체가 없을 때,

  • filter() → 빈 쿼리셋을 반환하지만
  • get()       → Error

그러니 객체가 DB에 존재하는지 확인하고자 할 때는 그냥 filter()exist() 메소드를 활용하자!





참고
https://wikidocs.net/4308
https://okky.kr/article/480444
https://velog.io/@jinatra/Django-C.R.U.D-연습#6-앱의-urlspy-작성
https://dev-mht.tistory.com/63

profile
으악

0개의 댓글