(8) Django 인스타그램 클론코딩 로그인 세션(session) 정보 유지하기
지난 글에서 로그인 정보를 세션을 통해 유지할 것이라고 했다.
그렇다면 세션(session) 이란 무엇일까?!
내 컴퓨터의 브라우저가 있다.
어떠한 서버에 들어가면 브라우저가 페이지를 조회한다.
이런 과정에서 어떠한 연결이 생기는데 연결이 되는 정보를 세션정보라고 하며,
세션정보를 통해 이 연결이 어떤 연결인지 정의할 수 있다.
즉, 서버입장에서는 다양한 클라이언트가 요청하는 연결을 관리를 하는데 관련 정보가 세션에 저장이 된다.
참고로 서버쪽에서 정보를 저장하는 것이 세션이고 클라이언트쪽에서 정보를 저장하는 것을 쿠키라고 부른다.
이 프로젝트는..
내가 로그인을 하는 순간 내 세션에다가 나의 로그인 정보를 저장해둘 것이다.
그럼 서버에서 세션에 있는 정보를 통해 사용자가 누구인지 식별할 수 있게 되는 것이다.
이런 세션을 어떻게 넣는지 알아보자.
if user.check_password(password):
# TODO 로그인을 했다. 세션 or 쿠키
request.session['email'] = email
return Response(status=200)
else:
return Response(status=400, data=dict(message="회원정보가 잘못되었습니다."))
사실 전 글의 Login클래스에서 session['email']에 정보를 저장해주었다.
(설명은 안했다. 미안하다 ㅋ)
그럼 메인에서 세션을 불러와보자
Content/views.py
class Main(APIView):
def get(self, request):
print("겟으로 호출")
feed_list = Feed.objects.all() # query set. == select * from content_feed;
print("로그인한 사용자 :", request.session['email'])
return render(request, "instagram/main.html", context=dict(feeds=feed_list))
콘솔에 찍는 코드를 찍고 로그인을 해보면,
이렇게 정보가 제대로 찍혀나오는 것을 확인할 수 있다.
메인 화면에서 정보를 띄워보자
class Main(APIView):
def get(self, request):
print("겟으로 호출")
feed_list = Feed.objects.all() # query set. == select * from content_feed;
print("로그인한 사용자 :", request.session['email'])
email = request.session['email']
if email is None :
return render(request, "user/login.html")
user = User.objects.filter(email=email).first()
if user is None :
return render(request, "user/login.html")
return render(request, "instagram/main.html", context=dict(feeds=feed_list, user = user))
맨 마지막에 user
정보도 넘어갈 수 있도록 추가했다.
main.html
<div>
{{ user.email }}
{{ user.nickname }}
{{ user.name }}
{{ user.profile_image }}
</div>
이 코드를 네비게이션 위에 추가하고 브라우저를 re-load해보면,
정보가 제대로 찍혀나오는 것을 확인할 수 있다!!!ㅠㅠ
(안보인다고? instagram 로고 위를 다시 보도록 ㅡㅡ)
이제 이걸 이렇게 적용해보았다 ㅎ
아주 나이스다 ㅋㅎ
이제 마지막 글이 남았다.
마지막 글에서는 로그아웃 기능을 만들 것이다.
예상되겠지만, 회원 정보를 세션에서 삭제해주면 된다. easy~하죠?