반응형
이 프로젝트도 마찬가지로 책 '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 입력 시 로그인 화면으로 전환 유무를 확인해보세요.
수고많으셨습니다.
다음시간에는 파일 업로드 및 시각화 구현을 해보겠습니다.
감사합니다.
'웹 개발 실습 > Django' 카테고리의 다른 글
[Django]_엑셀 계산 사이트 만들기 (6) result, loginFail 페이지 만들기, 그리고 번외(django에서 누가 봐도 깔끔하게 자료 만들기) (0) | 2023.08.03 |
---|---|
[Django]_엑셀 계산 사이트 만들기 (5) 파일 업로드 및 분석 (0) | 2023.08.02 |
[Django]_엑셀 계산 사이트 만들기 (3) 이메일 인증 회원가입 하기 (0) | 2023.08.02 |
[Django]_엑셀 계산 사이트 만들기 (2) 회원가입 하기 (0) | 2023.08.02 |
[Django]_엑셀 계산 사이트 만들기 (1) app의 웹 사이트, admin 화면 만들기 (0) | 2023.08.01 |