용기러기's Coding World

Yongki's Do it Django(2) - 로그인 기능 구현하기 본문

용기러기's Django

Yongki's Do it Django(2) - 로그인 기능 구현하기

yongkis 2020. 4. 12. 22:38

안녕하세요 :) 

지난번 회원가입 기능에 이어서 

이번에는 생성한 User 객체를 이용하여 로그인 기능을 구현해보고자 합니다 

 

먼저 , 로그인 기능을 어떻게 구현할까 간략하게 고민해보면, 

login.html에서(로그인 화면에서) 아이디와 패스워드 input value를 받은 뒤에(form method="POST")

그 values를 바탕으로

authenticate 과정(아이디와 패스워드가 User테이블에 있는 정보와 일치하는지 확인하는 과정)

을 거치고 login을 시켜주면 될 것 같습니다. 

자 그러면, 간단하게 login.html을 만들어 보겠습니다(역시 디자인은 포기..하고!).

login.html 화면
login.html 소스코드

이런 식으로, input에 userPsw(password)와 userId(username)값을 받습니다.

(*이때, 'keep_login' 부분은 안 따라 쓰셔도 됩니다 :))

자, 그럼 이제 views.py로 가서 이 부분을 제대로 설계해봅시다 :)

먼저, authenticate 와 login 을 import 해주세요! 

그다음에

login.html 에서 form action=" 이 부분!" 

이 부분에 적어준 경로로 왔을 때 연결되는 함수에 이렇게 적어줍니다.

elif 인 이유는 후에 로그인을 한  뒤에 그 로그인이 유지되도록 만들기 위해서 앞에 또 다른 상황을 적어줬기 때문인데요.

그 부분에 대해서는 다음 챕터에서 해보겠습니다 :) [그래서 여러분들은 elif 부분을 if로 만들어주시면 됩니다 !]

하나하나 읽어보면,

만약, POST 방식으로 요청이 들어왔을 때, 즉, 로그인 버튼을 눌렀을 때,

받아온 인수들(Id, password)을 username과 password라는 변수에 할당(assignment)해주고, 

그 할당한 변수들을 이용해서 authenticate(request, username="", password="") 형식으로 쓰이는

authenticate에 넣어주면,

만약 입력한 username과 password가 User table(유저 정보 데이터베이스)에 존재하고, 아이디와 비밀번호가 정확하다면,

해당 User object(유저 객체)를 return하고, 

아이디가 없거나, 비밀번호가 틀리다면, 

PermissionDenied 에러와 함께  None을 리턴합니다.

그래서 그에 맞게 ' is not None' 즉, return 값(user 변수에 할당되어 있는)이 None이 아니면,

login(request, user), 즉, 로그인을 시켜주고,

저 같은 경우는 userPage를 따로 만들어서 거기에 redirect 시키도록 했습니다(마지막에 어떤 경로로 이어줄지는 본인 선택입니다 :) ) 

그렇지 않다면, 즉, return값이 None이라면, 다시 로그인 화면으로(저의 경우에는 index.html 입니다) 돌아가 달라고 설정해줬습니다. 

 

그럼 로그인 과정의 핵심이 무엇인지 대충 감이 오 실 텐데요

authenticate 와 login 입니다.

python은 정말 너무나도 친절해서 저희가 하고자 하는 과정을 영단어로, 어떻게 보면 사람이 컴퓨터한테 육성으로 명령을 내리듯이

써주기만 하면 되도록 만들어놨는데요.

프로그래머 : django야 받아온 아이디와 패스워드가 User 테이블에 있는 정보와 일치하는지

authenticate(증명하다, 확인하다, 인증하다)

해주고, 만약 인증이 됐다면, 그 유저 객체를 리턴해주고

그 유저 객체를 로그인(login) 시켜줘. 

하지만, 만약 인증이 되지 않았다면, None을 리턴해줘 

 

자 여기까지 로그인 기능을 구현해봤는데요 

사실 여기까지 해보면, 아직 로그인을 한 것이 실감(?)이 잘 안 나실 것 같은데요

그래서 바로 다음 챕터에서 로그인을 하고, 그 로그인 상태를 유지시키면서

로그인 정보를 바탕으로 할 수 있는 간단한 기능들을 구현해보겠습니다. 

 

고생하셨습니다 :)