일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Vue
- socket io
- wetube
- 파이썬
- EC2
- Class
- NeXT
- 채팅
- flask
- react
- SAA
- dict
- Props
- node
- S3
- lambda
- merge
- 카톡
- SSA
- MongoDB
- 중급파이썬
- RDS
- async
- 튜플
- AWS
- pandas
- git
- crud
- docker
- TypeScript
- Today
- Total
초보 개발자
django sign-up form 본문
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가 일치하는지 확인해주는 과정을 만들어보자.
먼저 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에서 만들어 주려고한다.
필요한 정보들을 받아온 뒤,
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 |