Django당

(8) Django 인스타그램 클론코딩 로그인 세션(session) 정보 유지하기

이히당 2024. 6. 24. 16:20

지난 글에서 로그인 정보를 세션을 통해 유지할 것이라고 했다.

그렇다면 세션(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~하죠?

 

728x90