회원가입 기능

Red_Panda·2021년 3월 26일
1

오늘은 회원가입 기능을 만든다.

회원가입 기능을 만들고, 후에 로그인, 로그아웃을 구현한다.

회원가입을 위한 회원 정보 모델이 필요하다.

models.py 파일에 User 모델을 추가했다. id는 기본키, username, password, email은 필수입력이고, username, email은 중복으로 저장할 수 없다.

flask db migrate
flask db upgrade

그리고 cmd로 위 명령어를 순서대로 실행해 리비전 파일을 생성하고, 생성된 파일로 데이터베이스를 변경했다.

SQLite로 user 모델이 생성됐는지 확인했다.

회원가입을 위한 폼이다.

DataRequired() : 필수 항목
Length(min=a,max=b): 길이 a~b글자 사이로
EqualTo(a,'') : 해당 데이터가 a데이터와 일치하는지, 일치하지 않으면 '' 출력
Email() : 이메일 형식인지 검증 (email-validator 설치 필요, 아래 설치 화면)

폼을 만들었으니 이제 회원가입 뷰 만들기.
질뮨 뷰, 답변 뷰 처럼 회원가입 뷰도 하나 만들어준다.

/auth/로 시작하는 URL 호출되면 auth_views.py 파일 함수 호출한다.
/signup/ URL과 연결된 signup 함수는 POST 방식 요청시 계정등록, GET 방식 요청시 계정등록을 하는 템플릿을 렌더링

POST 방식 요청시 user에 username 값을 저장하고 존재하지 않는 값이면 계정등록을 진행, 존재하는 값이면 이미 존재한다고 flash로 오류를 발생시킨다.

flash : 프로그램 논리 오류를 발생시키는 함수

generate_password_hash 함수는 입력받은 값을 암호화 하여 저장하는데, 이를 복호화 할 수 없다. 그래서 로그인시 입력받은 비밀번호를 암호화해서 저장된 비밀번호화 비교해야 한다.

이제 만들어낸 auth_views.py를 __init__.py에 블루프린트를 등록한다. 등록방법은 이전에 등록했던 views.py들과 같다.

이제 회원가입 생성 템플릿 작성단계다.
templates 디렉토리 아래에 auth 디렉토리를 생성 후 signup.html 파일을 생성 후 작성한다.

생성하기 버튼을 누르면 POST방식으로 /auth/signup/ URL에 전송된다. error 발생시 출력할 페이지 form_errors.html을 아래와 같이 작성하고 {% include "form_errors.html" %}를 추가하여 오류가 발생할때 오류 내용을 표시하도록 했다.


필드에서 발생한 오류, flash를 거치면서 발생한 오류 총 2가지 부분으로 나뉘어 표시한다.

마지막으로 내비게이션 바에 넣어둔 계정생성 부분에 auth.signup 링크를 넣고 실행해본다.

사용자 이름 길이, 비밀번호 일치하지 않음, 이메일 형식 잘 검증 된다.

그리고 임의로 회원가입을 하고 db파일을 열어 잘 저장되는지 확인했다.

비밀번호는 정말 암호화되어서 내가 적어낸 비밀번호(1234)와 다르게 나온다.

사용자 이름은 중복x, 메일은 중복됐을때 생성했을때 위처럼 오류 페이지가 떴다. 아마도 User모델에 email에 unique=True로 설정되어 이미 존재하는 값을 저장할 수 없어서 같다.

그래서 이를 처리하기 위해 auth_views.py의 signup 함수에 수정 및 내용을 추가 해줬다.
중복된 사용자 이름만 없으면 계정을 생성하던 내용을 중복된 사용자 이름 없음 and 중복된 이메일 주소 없음으로 조건을 바꿨다.
또 수정내용은 추가 내용은 이메일만 중복일 경우, 사용자+이메일 둘다 중복일 경우에서 flash 오류 처리다.



2021.03.30 내용 추가
계정 생성을 해보려니, 아이디 중복x, 메일 중복x 일 경우에도 메일이 중복된다고 생성이 안됐다.

그래서 signup()부분을 약간 수정했다. 잘 만들어진다.

profile
신입 개발자

0개의 댓글