항상 하던 대로 새로운 가상환경을 만들고 초기 세팅을 만진 후 시작
회원가입과 로그인을 위한 app이므로 기본 정보들로만 이루어진 모델링을 아래와 같이 작성하였다.
password
의 경우 나중에 bcrypt를 통해 salting과 key stretching 작업을 거쳐 암호화되어 길어질것이므로 DB에 저장될 최대 길이를 200자로 설정하였다.
--
회원가입을 위해 필요한 데이터를 아래와 같이 만들었다.
이메일과 패스워드 등에 규칙을 주려고 했고, 정규표현식을 사용하여 로직을 만들었다.
로직은 아래와 같다.
간단히 코드 리뷰를 해보면,
User
객체 생성 (+ 프론트가 볼 생성 메세지)KeyError
을 잡기 위해 try
, except
활용이정도가 될 듯 하다.
처음 비밀번호 정규표현식을 작성할 때 -+_
등을 썼는데, 해당 특수문자들은 뭔가 정규표현식 내에서 쓰는게 있는지 오류가 떴다.
-
의 경우는 a-zA-Z0-9
와 같이 범위를 지정해주는거라 뭔가 함부로 쓰면 안되는 듯 하다.
그래서 이메일에도 뒤에서 준 듯 하다.
회원가입 시 이메일 중복을 막기 위한 로직을 추가한 것을 깜빡하여 급하게 추가하였다.
최종 코드는 아래와 같다.
sign_up_email
과 동일한 이메일을 가지고 있는 객체가 DB에 있는지 exists()
를 통해 검사exists() method를 사용하지 않고 해보고 싶어 아래와 같이 코드를 짰을 때,
내가 생각하기에, get()
메소드를 쓸 때 객체가 없게 되면 Error
가 반환되는 듯 하다.
filter()
메소드의 경우엔 객체가 없을 땐 빈 쿼리셋을 반환하지만, get()
메소드는 그렇지 않다.
작성한 View를 받아올 앱의 urls.py을 아래와 같이 편집
users app을 받아올 main urls.py를 아래와 같이 편집
오늘은 간단히 모델 설정과 회원가입 정도를 만들어보았고, 이제 회원가입을 통해 DB에 저장된 데이터와 비교하는 view도 만들어봐야할 듯 하다.
위 코드를 짜기까지 여러가지 착오가 있었는데, 확실히 오류코드를 잘 보다보면 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