Django - ExcelCalCulator_4
Page content
개요
Django 한 그릇 뚝딱
교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함- 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김
교재 홍보
Step 01 - 이전 글
- 1편 : https://dschloe.github.io/python/2023/08/django_excel_calculator_1/
- 2편 : https://dschloe.github.io/python/2023/08/django_excel_calculator_2/
- 3편 : https://dschloe.github.io/python/2023/08/django_excel_calculator_3/
Step 02 - 로그인 기능 구현
- 로그인된 사용자만 이용할 수 있도록 구현
- 이 때, 현재 사용자가 로그인된 사용자인지 판단하려고 세션 사용
- 회원 가입 통한 과정 이외에도 정상적인 로그인 과정에서도 세션 처리 진행
Step 03 - 로그인 처리 구현
check - 1 : signin.html 구현
- 파일 경로 : ExcelCalculate > main > templates > main > signin.html
<h3>안녕하세요. 로그인을 진행해주세요.</h3><br>
<form action="signin/login" method="POST">{% csrf_token %}
<div class="input-group">
check - 2 : urls.py
-
urls.py에서도 처리해준다.
- 파일 경로 : ExcelCalculate > main > urls.py
- 기존
from django.urls import path from . import views urlpatterns = [ path('', views.index, name="main_index"), path('signup', views.signup, name="main_signup"), path('signup/join', views.join, name="main_join"), path('signin', views.signin, name="main_signin"), path('verifyCode', views.verifyCode, name="main_verifyCode"), path('verify', views.verify, name="main_verify"), path('result', views.result, name="main_result"), ]
- 수정
- url을 추가하였다.
from django.urls import path from . import views urlpatterns = [ *path('', views.index, name="main_index"), path('signup', views.signup, name="main_signup"), path('signup/join', views.join, name="main_join"), path('signin', views.signin, name="main_signin"),* path('signin/login', views.login, name="main_login"), *path('verifyCode', views.verifyCode, name="main_verifyCode"), path('verify', views.verify, name="main_verify"), path('result', views.result, name="main_result"),* ]
check - 3 : views.py
- 이번에는 views.py login 함수를 만들고, 로그인 처리 기능을 구현한다.
- 파일 경로 : ExcelCalculate > main > views.py
- 사용자가 입력한 이메일과 비밀번호를 가져왔고, 사용자가 입력한 이메일을 통해 User 모델에서 user 데이터를 찾아온다.
- 해당 user 데이터에 저장된 패스워드 값과 사용자가 입력한 패스워드가 일치하는지 확인하고, 일치하지 않을 때는 로그인 화면으로 돌아가도록 처리
from django.shortcuts import render, redirect
from random import *
from .models import *
from sendEmail.views import *
def signin(request):
return render(request, 'main/signin.html')
def login(request):
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
request.session['user_email'] = user.user_email
return redirect('main_index')
else:
return redirect('main_loginFail')
def verifyCode(request):
return render(request, 'main/verifyCode.html')
- 추가로 해야 하는 작업은. 메인 화면에는 로그인된 사용자만 접근해야 한다.
- 따라서 각 화면에 접근하는 함수에서 현재 세션에 사용자 정보가 담겨 있는지를 확인 후 담겨 있을 때 정상적인 페이지에 연결한다.
- 사용자 정보가 세션에 담겨 있지 않다면 로그인 화면으로 연결해 주도록 처리한다.
- index 함수와 result 함수에 로그인 확인 여부 확인 처리를 구현함.
'user_name' in request.sesssion.keys():
키 값이 존재한다는 것은 로그인 과정 중에 세션에 저장한 것이므로 로그인된 상태로 생각할 수 있다.- 로그인 되지 않으면 로그인 화면으로
redirect
시켜 준다.
- 로그인 되지 않으면 로그인 화면으로
from django.shortcuts import render, redirect
from random import *
from .models import *
from sendEmail.views import *
# Create your views here.
def index(request):
if 'user_name' in request.sesssion.keys():
return render(request, 'main/index.html')
else:
return redirect('main_signin')
...
def result(request):
if 'user_name' in request.sesssion.keys():
return render(request, 'main/result.html')
else:
return redirect('main_signin')
Step 04 - 로그아웃 기능 구현
-
로그아웃 버튼은 url로 이동되도록 초기 제공한 html에 코드가 작성된다.
-
이제 해당 url에 대한 처리를 위해 urls.py 파일을 수정한다.
- 파일 경로 : ExcelCalculate > main > urls.py
- 기존
from django.urls import path from . import views urlpatterns = [ path('', views.index, name="main_index"), path('signup', views.signup, name="main_signup"), path('signup/join', views.join, name="main_join"), path('signin', views.signin, name="main_signin"), path('signin/login', views.login, name="main_login"), path('verifyCode', views.verifyCode, name="main_verifyCode"), path('verify', views.verify, name="main_verify"), path('result', views.result, name="main_result"), ]
- 수정
- logout 경로를 처리했다.
from django.urls import path from . import views urlpatterns = [ *path('', views.index, name="main_index"), path('signup', views.signup, name="main_signup"), path('signup/join', views.join, name="main_join"), path('signin', views.signin, name="main_signin"), path('signin/login', views.login, name="main_login"), path('verifyCode', views.verifyCode, name="main_verifyCode"), path('verify', views.verify, name="main_verify"), path('result', views.result, name="main_result"),* path('logout', views.logout, name='main_logout') ]
-
이번에는
[views.py](http://views.py)
파일에서logout
함수를 생성하고 로직을 구현한다. -
로그아웃의 개념은 세션에 특정 정보가 없도록 하는 것이 로그아웃 기능에서 구현해야 할 기능이다.
- user_name과 user_email 정보를 삭제시킨다.
- 파일 경로 : ExcelCalculate > main > views.py
from django.shortcuts import render, redirect
from random import *
from .models import *
from sendEmail.views import *
def result(request):
if 'user_name' in request.sesssion.keys():
return render(request, 'main/result.html')
else:
return redirect('main_signin')
def logout(request):
del request.session['user_name']
del request.session['user_email']
return redirect('main_signin')
Step 05 - 테스트
- 이제 로그인 및 로그아웃을 테스트 해본다.