Base/Django

[Django] #8 - Django 세션으로 데이터 넘기기 / 로그인 구현 / 로그인시 로그인 페이지로 이동 막기

반응형

세션으로 데이터를 넘기고 사용하기 전에 세션이 무엇인지 알아보자 

 

 

세션이란?


세션이란 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장을 하는 것을 말한다.


즉 서버에서 어떠한 데이터를 저장해서 사용한다는 것이다. 이러한 데이터들은 사용자가 로그인한 뒤 해당 웹사이트를 이용할 동안 로그인을 유지하는 방법으로 많이 사용한다. 이 세션을 사용하지 않는다면 사용자는 페이지를 이동할 때마다 로그인을 해야 된다. 또한 물건을 살 때도 결제 페이지로 가서 다시 한번 물건을 선택하는 그런 일이 생긴다. 이런 사용자의 데이터를 저장하고 사용하는 것은 세션으로 사용한다. 

 

 

 

세션 사용하기


장고에서 세션을 사용하는 것은 간단하다. 

view 부분에서 context에 데이터를 넣었던 방식과 유사하다.

request.session을 사용하여 세션을 이용할 수 있다.

우리가 retrun에서 render를 쓴다는 것은 화면을 forward 하는 것이다.

하지만 이렇게 하면 요청된 페이지에서밖에 사용하지 못한다. 

요청된 페이지 이외에 페이지에서도 해당 데이터를 사용하려면 

session이라는 곳에  데이터를 심어서 보내게 되면 모든 템플릿에서 사용할 수 있게 만든다.

 

 

views.py

해당 로그인을 하는 view 부분을 보면 if와 else로 나눠져 있다. 이 부분에서 if 문을 보면 

request.method == 'GET'일 경우라는 뜻은 해당 url을 get 방식으로 접근했을 때다. 보통 로그인은 post로 값을 보내기 때문에 GET은 잘못된 요청을 뜻한다. 

 

elii 부분을 봤을 때 이 부분은 로그인하는 부분에 해당한다. 해당 부분은 request라는 사용자의 요청 부분에서 해당 id 값으로 받아온다. 

로그인을 할 때 우리는 사용자에게 id와 패스워드를 받게 된다. 이 아이디 비번이 있는지 모델 부분을 통해 확인하고

있다면 home 화면으로 이동하게 한다. 

하지만 이렇게 될 경우 해당 사용자가 누군지 알지 못한 채 home으로 가게 된다. 왜냐하면 해당 데이터를 유지하는 방법이 없기 때문이다. 이럴 때 session을 사용해서 페이지 이동이 있어도 해당 사용자의 데이터를 유지하도록 한다.

 

request.session으로 값을 넣어준 다음 그 값을 context에 넣어준다.

아래 부분에 request.session 에 이름을 담고 유저의 이름을 담는다. 그 뒤 context에 userSession이라는 이름으로 보내게 된다. 해당 이름은 우리가 임의로 지어줄 수 있다. 

그 후 home으로 보내면서 context를 같이 보내준다. 이 값을 해당 페이지에만 보낼 수도 있지만 header로 보내게 된다면 모든 페이지에서 로그인 정보를 가질 수 있게 된다.

지금 이 값들이 들어가는 부분이 header 부분이어서 해당하는 위치를 수정해준다. 이 값을 넣음으로써 context에 userSession으로 지정해줬던 name을 출력하게끔 한다.

 

header.html

 

 

 

이렇게 유저의 이름이 해당 페이지에 나오게 된 걸 볼 수 있다.

 

 

 

 

-참고 사이트

88240.tistory.com/190

반응형