Django - ExcelCalCulator_3

Page content

개요

  • Django 한 그릇 뚝딱 교재의 내용에서 멀티캠퍼스 강의에 맞게 일부 수정함
  • 2019년 버전이고 현재는 2023년이기 때문에 소스코드 변경 사항이 필요할 거 같아서 글을 남김

교재 홍보

Untitled

Step 01 - 이전 글

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.pyverify 함수를 구현한다.
    • 사용자가 입력한 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):
	# 생략
  • 인증이 이루어진 과정은 아래와 같다.

Untitled

Untitled

  • username과 password를 정상적으로 입력한다.

Untitled

Untitled

Untitled

  • 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):
	# 생략
  • 세션에 사용자의 해당 정보를 저장하는 이유?
    • 로그인과 회원 가입 등의 화면 이외에는 로그인된 사용자만 이용할 수 있도록 처리해야 함
    • 이 때 사용자가 로그인된 사용자인지 판단하기 위해서는 세션을 사용함