Django - ExcelCalCulator_3
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/
Step 02 - 인증하기 구현
- 자신의 이메일로 발송된 인증 코드를 입력한 후, “인증하기” 버튼을 누르면,
main app
의[views.py](http://views.py)
파일에 만들어 놓은verify
함수로 오도록 설정한다.verifyCode.html
url을 설정한다.- 파일 경로 : ExcelCalculate > main > templates > main > verifyCode.html
- 46번 줄의 form 태그 action 값을 verify로 설정
<h3>이메일로 전송된 메일의 인증코드를 입력해주세요.</h3><br>
<form action="verify" method="POST">{% csrf_token %}
<div class="input-group">
- 이번에는
main app > views.py
에verify 함수
를 구현한다.- 사용자가 입력한 code 값을 받아왔고, 쿠키에 저장된 code 값을 가져온다.
- 두 값을 비교해 일치할 때는 해당 사용자의 user_validate 값을 1로 변경시켜준다.
- user의 user_validate 값은 1로 변경시켜 준 후, 해당 변경 사항을 저장한다.
- 한번 더 쿠키 값을 세팅하려고 redirect 함수에 메인 화면을 넘겨 준 결괏 값은 response로 받아와서 해당 response에 대해 이전에 설정한 2개의 쿠키값을 삭제하고, 로그인된 유저의 정보를 쿠키로 설정하며 response를 반환해 준다.
- 만약 두 값이 일치하지 않는 경우, 다시 인증 코드 입력 화면으로
redirect
시켜 준다. - 코드 구현 후, 회원 가입을 재 진행한다. 이메일로 전송된 인증 코드를 입력 한다.
from django.shortcuts import render, redirect
from random import *
from .models import *
from sendEmail.views import *
# Create your views here.
def index(request):
# 생략
def signup(request):
# 생략
def join(request):
# 생략
def signin(request):
# 생략
def verifyCode(request):
# 생략
def verify(request):
user_code = request.POST['verifyCode']
cookie_code = request.COOKIES.get('code')
if user_code == cookie_code:
user = User.objects.get(id = request.COOKIES.get('user_id'))
user.user_validate = 1
user.save()
response = redirect('main_index')
response.delete_cookie('code')
response.delete_cookie('user_id')
response.set_cookie('user', user)
return response
else:
return redirect('main_verifyCode')
def result(request):
# 생략
- 인증이 이루어진 과정은 아래와 같다.
- username과 password를 정상적으로 입력한다.
- User validate가 체크가 된 것을 확인한다. 즉, 인증이 이루어진 것이다.
세션을 활용한 인증방식
-
우선 ExcelCalculate > ExcelCalculate > settings.py에 추가 설정 코드를 작성한다.
-
MIDDLEWARE를 확인한다.
- 기존
MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", ]
- 수정
MIDDLEWARE = [ "django.middleware.security.SecurityMiddleware", "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "django.contrib.sessions.middleware.SessionMiddleware" ]
-
INSTALLED_APPS에서
"django.contrib.sessions"
입력이 되어 있는지 확인한다.
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"main",
"sendEmail",
"calculate"
]
verify.py 함수 수정
- 기존 코드는 다음과 같다.
from django.shortcuts import render, redirect
from random import *
from .models import *
from sendEmail.views import *
# Create your views here.
def index(request):
# 생략
def signup(request):
# 생략
def join(request):
# 생략
def signin(request):
# 생략
def verifyCode(request):
# 생략
def verify(request):
user_code = request.POST['verifyCode']
cookie_code = request.COOKIES.get('code')
if user_code == cookie_code:
user = User.objects.get(id = request.COOKIES.get('user_id'))
user.user_validate = 1
user.save()
response = redirect('main_index')
response.delete_cookie('code')
response.delete_cookie('user_id')
response.set_cookie('user', user)
return response
else:
return redirect('main_verifyCode')
def result(request):
# 생략
- 수정된 코드는 아래와 같다.
- 세션에 사용자 정보를 저장한다.
from django.shortcuts import render, redirect
from random import *
from .models import *
from sendEmail.views import *
# Create your views here.
def index(request):
# 생략
def signup(request):
# 생략
def join(request):
# 생략
def signin(request):
# 생략
def verifyCode(request):
# 생략
def verify(request):
user_code = request.POST['verifyCode']
cookie_code = request.COOKIES.get('code')
if user_code == cookie_code:
user = User.objects.get(id = request.COOKIES.get('user_id'))
user.user_validate = 1
user.save()
response = redirect('main_index')
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
else:
return redirect('main_verifyCode')
def result(request):
# 생략
- 세션에 사용자의 해당 정보를 저장하는 이유?
- 로그인과 회원 가입 등의 화면 이외에는 로그인된 사용자만 이용할 수 있도록 처리해야 함
- 이 때 사용자가 로그인된 사용자인지 판단하기 위해서는 세션을 사용함