초보 개발자

django sign-up form 본문

Python/airbnb 클론

django sign-up form

taehyeki 2022. 2. 16. 18:51

 

Sign up

 

login form 처럼 sign up form을 만들어 보려고 한다. 역시 forms.Form을 상속받아 SignUpForm을 만들어주고

django 기본 User에서 제공해주는 last_name, first_name, email, password만 간단하게 넣어보려고 한다.

username을 따로 받지 않은 이유는 email의 값을 넣으려고 하기 때문이다.

 

이렇게 form을 만들고 View에서 FormView를 상속하여 만들어보자.

form_class에 form 방금 만든 폼을

success_url에는 reverse_lazy를(일반 reverse를 쓰면 View가 읽힐 때 urls를 읽은 상태가 아니라 찾지 못함)

template_name에는 우리의 html을 적어준다.

 

이렇게 해주면 get, post요청에 상관없이 해당하늘 form을 브라우저로 전송해주고, 받아온 값이 valid하지 않다면 다시 그 값들을 form으로 그대로 돌려주기도한다. 만약 valid하다면 succes_url로 이동시켜준다.

 

브라우저를 열어보면 위와 같은 화면이 생겨있는 것을 확인할 수 있다. login form에서와 마찬가지로 

clean_method를 사용하여 email이 존재하는지, password가 일치하는지 확인해주는 과정을 만들어보자.

users/forms.py.SignUpForm

먼저 email을 가져와서 try except를 돌린다. 해당 email이 있다면 error를 일으키고, 존재하지 않는다면 email을 그대로 반환해주는 역할이다. 여기서 except User.dDoseNotExist 가 아닌 except Exception을 해줘도 될꺼라는 생각에 무심코 적었는데 제대로 오류가 발생하지 않았었다. 그 이유는 사실 잘 모르지만 DoesNotExist 에러를 명시해줬더니 말끔히 사라졌다.

 

그리고 password를 비교해주는 함수를 만들었다. clean_password가 아닌 clean_passwrod1로 적어준 이유는 password1 field가 password field보다 아래에 있기 때문이다. 만약 clean_passwrod 함수에서 실행시켜줬다면 password1의 값은 불러올 수가 없다. 

 

두 비밀번호를 비교해주어 다르다면 error를 발생시켜주었다, 따로 리턴값을 주지 않았는데 그 이유는 어처피 비밀번호가 같다는 뜻이니까 password값만 있으면 되지않을까?? 라는 생각이다.

 

 error가 발생하지 않았다면 form이 valid하다는 뜻이니까. view는 알아서 form_valid를 실행시켜줄 것이다. 우리는 이걸 오버라이딩 해서 여기서 회원가입을 시키고 바로 로그인까지 시켜주려고한다.

 

그 회원가입을 시켜주는 기능을 view에서가 아닌 form에서 만들어 주려고한다.

users/forms.py.SignUpForm

필요한 정보들을 받아온 뒤, 

create가아닌 create_user를해주자, 이렇게 해주는 이유는 create로 만들게 되면 password가 hash가 되지 않은 상태로 만들어진다. create_user는 이 점을 보완해준다.

그리고 user.last_name과 first_name을 각각 채워주고 save()를해주면 잘 저장이 될 것이다.

 

View로 돌아와서 

form_valid를 오버라이딩해주자. 이렇게하면 sign up의 기본적인 기능은 다 만들었다.

'Python > airbnb 클론' 카테고리의 다른 글

send email django  (0) 2022.02.18
django sign-up form with model form  (0) 2022.02.16
django login form 2 with FormView  (0) 2022.02.15
django login form 1  (0) 2022.02.15
django S3, RDS 연동해보기 !  (0) 2022.02.10