본문 바로가기
웹 개발 실습/Django

[Django]_엑셀 계산 사이트 만들기 (4) 로그인 여부 확인, 로그아웃

by ssolLEE 2023. 8. 2.
반응형

이 프로젝트도 마찬가지로 책 'Django 한 그릇 뚝딱'의 Chapter 4을 보며 실행해보았습니다. 책의 저자님께 다시 한 번 감사말씀 드립니다.

 

오늘은 세션(session)을 이용할 것입니다. 오늘의 작업을 하기 전에 환경 설정을 확인합니다.

 

환경 설정 확인하기

 

  • ExcelCalculate > settings.py로 이동합니다. 다음 표시된 것이 있으면 됩니다. 없으면 추가해주세요.

 

 

세션에  user 정보 저장하기

 

  • ExcelCalculate > main > views.py 로 이동합니다.
  • 쿠키를 통해 user 정보를 저장하던 방식을 세션에 user 정보를 저장하는 방식으로 바꿔줍니다.
  • 입력했던 response.set_cookie('user', user)는 주석처리하고, 그 아래 두 줄 입력합니다.
        # 저장되어 있는 쿠키를 삭제
        response.delete_cookie('code')
        response.delete_cookie('user_id')
        # response.set_cookie('user', user)
        # 사용자 정보를 세션에 저장
        request.session['user_name'] = user.user_name   # 로그인화면 구현
        request.session['user_email'] = user.user_email # 로그인화면 구현
        
        return response
  • 이렇게 세션에 user 정보를 저장하는 이유는 현재 user가 로그인 상태인지 판단하기 위해서 입니다. 우리는 로그인과 회원 가입 등의 화면 이외에는 로그인된 사용자만 이용할 수 있도록 처리해야 합니다. 

 

로그인 페이지 구현하기

  • ExcelCalculate > main > templates > main > signin.html 로 이동합니다.
  • 45번쨰 줄의 <form> 태그의 action 값을 입력합니다.

  • 이제 흐름이 느껴지실 것 같습니다. 이제 signi.html 파일에서 user가 로그인 버튼을 눌렀을 때 이동할 url처리를 진행합니다.
  • ExcelCalculate > main > urls.py 로 이동하여 path를 추가합니다. url의 처리를 views.py의 login 함수로 처리하라는 말이 보이시나요?
path('signin/login', views.login, name= loginEmail),
  • ExcelCalculate > main > views.py 로 이동하여 login 함수를 설정합니다. 
def login(request):
    # 로그인된 user만 이용할 수 있도록 구현
    # 로그인 user 판단을 위해 세션 사용(verify함수)
    # 세션 처리 진행
    loginEmail = request.POST['loginEmail']
    loginPW = request.POST['loginPW']
    user = User.objects.get(user_email = loginEmail)
    if user.user_password ==loginPW:
        request.session['user_name'] = user.user_name # user가 회원가입 시 입력한 정보
        request.session['user_email'] = user.user_email # user가 회원가입 시 입력한 정보
        return HttpResponse("test")
  • 세션은 user 정보를 가지고 있기 때문에 로그 추적이 가능합니다.
  • 추가로 더 할 작업이 있습니다. index 함수에서 user 정보가 세션에 존재하면 메인 화면으로 출력/ 세션에 없다면 로그인 화면으로 출력하는 조건문을 입력해야 합니다.
def index(request):
    if 'user_name' in request.session.keys():
        return render(request, "main/index.html")
    else:
        return redirect("main_signin")
  • result 함수에도 로그인 여부 확인 처리를 index 함수와 마찬가지로 구현합니다.
def result(request):
    if 'user_name' in request.session.keys():
        return render(request, "main/result.html")
    else:
        return redirect("main_signin")

 

 

로그아웃 기능 구현하기

 

  • 로그아웃 버튼은 메인 화면에 있습니다. 버튼을 누르면 ~/logout으로 이동하도록 합니다. 
  • ExcelCalculate > main > urls.py 로 이동하여 path를 추가합니다. 
path('logout', views.logout, name="main_logout")
  • ExcelCalculate > main > views.py 로 이동하여 logout 함수를 설정합니다. 
  • 로그아웃의 개념을 개발자 입장에서 생각해볼까요? 네, 바로 세션 종료입니다. 그러면 어떻게 종료시킬까요? 세션 정보를 삭제하면 됩니다. python 문법에서 객체를 삭제하는 del 을 이용합니다.
def logout(request):
    del request.session['user_name']
    del request.session['user_email']

    return redirect('main_signin')

 

확인하기

  • 로그인 작동 유무, 로그아웃 작동 유무, /result 입력 시 로그인 화면으로 전환 유무를 확인해보세요. 

 

수고많으셨습니다. 

다음시간에는 파일 업로드 및 시각화 구현을 해보겠습니다.

감사합니다.