Django - ExcelCalCulator_4

Page content

개요

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

교재 홍보

Untitled

Step 01 - 이전 글

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 - 테스트

  • 이제 로그인 및 로그아웃을 테스트 해본다.

Untitled

Untitled

Untitled