Server/Django project 1 - shopping mall

7. Django 로그인 view 구성

개발자킹콩 2020. 9. 23. 19:34

로그인의 경우 회원가입과 비슷한 구조를 갖는다. 그래서 설명이 빈약할 수 있다ㅎㅎ

다른점이 있다면 ★session 이다.

밑에서 자세히 설명하겠지만 맛보기로 설명하자면,

로그인이 되었을 때와 로그인이 되지 않은 상태에서는

서로 다른 권한을 갖고 있고 현재 페이지도 그 권한에 따라 다를 수 있는 것이다.

그렇다면 로그인이 되었다면 뭔가를 더 가졌다는 말이고, 이를 어떻게 설정하는지도 보자!!

 

 

1. templates ( 'login.html' )

login.html

해당 templates를 register.html에서 로그인으로 몇 가지 text만 수정하면 된다.

기본적으로 form형태를 유지하도록 완성되어있기에 궁금한점은 댓글 적어 주세요~

 

 

 

2. forms (LoginForm)

forms.py

비밀번호 확인에 해당하는 re_password만 삭제 해주면, 

RegisterForm과 같은 구조이다. (PasswordInput은 비밀번호 ●● 형태이다.)

 

 

3. password

비밀번호의 경우 보안이 굉장히 중요한 데이터이기 때문에 이를 보호해주는 함수들이 많다.

form.py

여기서 make_password와 check_password가 존재한다. 

 

우리가 회원가입을 하면 비밀번호의 경우 widget을 PasswordInput으로 넣더라도

관리자 페이지에서는 일반 text처럼 데이터들을 보안 없이 들어가게 된다.

그렇기에 넣을 때 복구가 안되는 text로 변경해주는 make_password를 사용해서 데이터를 넣는다.

 

(1) make_password

forms.py -> class RegisterForm -> 패스워드 부분 수정

 

아래에서 3번째줄에 password를 그냥 넣지않고, make_password 함수를 이용해서 DB에 넣는다.

 

admin 페이지에서 본 회원정보

 

(2) check_password

DB의 비밀번호 가져와서 입력한 비밀번호와 일치하는지 확인하는 함수이다.

form.py

밑에서 7번째줄에서 check_password가 등장한다. 

첫 번째 인자는 값이 일치하는지 확인할 데이터가 들어가고,

두 번째 인자는 incoding 되어있는 DB안의 데이터를 들고온다. 

이 두 가지를 비교하여, 해당 비밀번호로 로그인을 수행해도 되는지 조건을 달아놓았다. 

 

(이건 밑에서 중요하게 다룸)

아무 error이 없다면 해당 LoginForm의 속성(멤버변수) email을 생성해서

여기에 방금 이상없이 로그인이 수행된 유저의 데이터를 넣는다. 

 

 

4. views

이제 LoginForm까지 만들었으니 

LoginForm을 가져와서 Loginview에 설정한다.

현재 LoginView는 form형식을 쓰기위해 FormView를 사용하고 있다.

이후 다양한 View들도 상속받아 어떻게 사용하는지 보게 될 것이다. (ListView 등)

 

 

5. urls

이제 url연동을 한다. url이 있어야 그 페이지로 들어가지!!

 

urls.py

해당 'login/'를 url로 만들어 줌으로써, 로그인 페이지가 완성되었다.

 

무튼, 이렇게 되면 정상적으로 login에서 예외가 발생하지 않는다면 127.0.0.1:8000 페이지로 가게 된다.

이렇게 되면 모든 연결은 완성된다.

 

 

 6. session 

이 내용은 중요하니 개념을 따로 익히고 코드를 보자!!!

yeongwoo-cho.tistory.com/17

 

2. 쿠키와 세션 (cookie and session)

우리가 웹페이지에 접근을 할 때 로그인이 되어 있을 때와 로그인이 되어있지 않을 때는 다양한 것들이 다르게 반응한다. 권한도 다르고 해당 페이지도 다르게 나타날 수 있다. 그렇다면 로그��

yeongwoo-cho.tistory.com

interconnection.tistory.com/74

 

쿠키와 세션 개념

쿠키와 세션은 개발자 말고도 인터넷 사용자라면 누구나 많이 들어본 단어입니다. 하지만 개념에 대해서는 많은 사람들이 헷갈려 하기에 쉽고 간단하게 정리해보려고 합니다. 일�

interconnection.tistory.com

 

그럼 session을 이용한 로그인 상태 유지를 어떻게 코드로 구현할 지를 보자

 

forms.py

 

위의 forms.py에서 form으로 데이터를 받을 때 오류가 없다면 해당 form의 속성 email을 생성하고

여기에 입력받은 email을 저장하도록 설정하였다.

 

 

views.py

이렇게 LoginView에서는 LoginForm을 form_class로 지정했고 로그인이 될때,

요청안의 session의 user에 해당 form으로 입력받은 email을 저장하도록 한다.

이렇게 되면 해당 서버에서는 이 session id 데이터를 보고

현재 누가 로그인이 되어있는지를 확인하게 된다.

 

 

views.py
index.html

 

로그인이 성공하면 home으로 url을 정했고 이는 views.py에 존재하는 index 함수를 실행하게 되고,

이때 index.html 요청을 하게 되는데 이때 'email'에 session의 user정보를 같이 담아서 보낸다.

이렇게 되면 로그인한 유저의 email을 띄울 수 있게 된다.

 

 

7. 그럼 로그아웃은 어떻게 할 것인가??

간단하다. session id를 지워주기만 하면 된다.

그 후, 'logout/' url에 접근했을 때 session id가 존재하면

해당 id를 삭제시켜서 로그아웃 시키는 조건을 만들었다.

 

views.py
urls.py

 

 

 

 

 

결과 확인

자! 확인해보자

1. 처음 들어가면 로그인 되어있지 않다.

 

 

2. 로그인을 한다.

 

 

 

3. 정상적으로 로그인되어 home으로 이동하였고,

   해당 session id가 존재함을 확인했다. 로그인이 되어있는 상태로 인식하는 것이다.

 

 

 

4. 다음과 같이 logout url을 검색하면,

 

 

5. 로그아웃 되었다.

 

 

 

 

 

 

이상!! 오늘도 감코!!