본문 바로가기
Programming/Django

Django / Session 세션 저장

by with chu 2021. 3. 11.
728x90

Django - Session 세션 저장

목표 : PyDev Django Project를 생성하고 세션을 저장하는 연습을 한다.


 

프로젝트 생성하기

New - Other - PyDev Django Project 를 만들어준다.

 

 

프로젝트 오른쪽 마우스 - Django - Migrate 를 실행해준다

( app을 만들고나서 실행해도 되나 어쩌다 가끔 에러가 나서 먼저 해주는 편이다.)

 

Create application 으로 app을 만들어준다. 여기서는 sessionapp 이라고 하겠다.

sessionapp 안에 html파일들을 모아놓을 tamplates 폴더를 만든다. 이때 이름은 tamplates 만 가능하다. 

 

 

파일명 : settings.py

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    
    'sessionapp', 
]

settings.py을 열어 INSTALLEINSTALLED_APPS 에 app 이름(sessionapp)도 추가해준다.

 

 

Make Migrations 를 해주고 Migrate도 한번 더 실행해준다.

 

 

파일명 : urls.py

from django.contrib import admin
from django.urls import path
from sessionapp import views

urlpatterns = [
    path('admin/', admin.site.urls),
    
    path('', views.mainFunc),
    path('setos/', views.setosFunc),
    path('shows/', views.showsFunc),
]

views 를 import 해주고 path('', views.mainFunc), 처럼 필요한 요청명과 해당 function이름을 path에 적어준다.

이러한 function들을 views에 구현해 줄 것이다. 

 

 

파일명 : views.py

from django.shortcuts import render
from django.http.response import HttpResponseRedirect

# Create your views here.
def mainFunc(request):
    return render(request, 'main.html')

def setosFunc(request):
    if "favorite_os" in request.GET: #존재한다면
        #print(request.GET["favorite_os"])
        request.session['f_os'] = request.GET["favorite_os"] #세션 담기
        return HttpResponseRedirect('/shows') # 클라이언트를 통해 html부름
    else:
        return render(request, 'setos.html') # 바로 html부름

web을 열면 바로 실행되는 Main은 main.html 을 호출한다.

setosFunc 에서 사용자에게 선호하는 os 를 선택하게 하고 그 정보를 session에 저장한다.

저장 후 /shows 요청명으로 다음 html 화면으로 넘어가게 한다.

def showsFunc(request):
    context = {} # dict type 변수 생성
    
    if "f_os" in request.session:
        context['f_os'] = request.session['f_os']
        context['message'] = "선택하신 운영체제는 %s입니다."%request.session['f_os']
    else:
        context['f_os'] = None
        context['message'] = "운영체제를 선택하십시오."
    
    request.session.set_expiry(600); # 세션 유효기간 /초
        
    return render(request, 'show.html', context)

그 다음 화면에서는 저장 된 세션을 request.session 으로 불러와서 출력한다.

저장 된 세션이 없다면 설문을 다시 시행하도록 한다.

 

세션 유효기간
  • request.session.set_expiry (600) 은 600초( 10분간 ) 세션이 유효하다.

  • value가 datetime 또는timedelta 객체라면, 해당 날짜/시간에 만료 된다.

  • value가 0이면 사용자의 웹 브라우저가 닫힐 때 세션 쿠키가 만료된다.

 

 

파일명 : sessionapp > templates > main.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
메인화면<p/>
session 연습 : 세션이란 일정시간 동안 같은 사용자로 부터 들어오는 여러 가지 요구들을 
하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술.
클라이언트와 서버 사이의 연결이 유지되는 것처럼 하기 위해 
클라이언트의 정보를 서버 컴퓨터의 일정 공간을 확보해 무엇인가를 기억시킬 수 있다. 
<br>
<a href="/setos/">운영체제 선택하기</a>
</body>
</html>

main 에서 /setos/라는 요청명을 '운영체제 선택하기'에 a 태그로 감싸줬다. 

 

파일명 : sessionapp > templates > setos.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>SET OS(운영체제) - 세션 이해하기</h1>
<hr>
<p2>운영체제 선택</p2>
<a href="/setos?favorite_os=window">window</a>
<a href="/setos?favorite_os=macos">mac os</a>
<a href="/setos?favorite_os=linux">linux</a>
</body>
</html>

선택옵션 중 한가지를 선택하면 세션으로 저장 될 favorite_os 정보를 가지고 GET방식요청이 넘어간다.

 

파일명 : sessionapp > templates > setos.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>세션 결과 보기</h2>
<br>
<p>반환된 context의 message값: {{message}}</p>
<p>반환된 context의 f_os값: {{f_os}}</p>
<p>session에 저장 된 f_os 값: {{request.session.f_os}}</p>
<hr>
<a href="/setos/">운영체제 다시 선택</a>
<a href="/">Main으로 가기</a>
</body>
</html>

선택이 끝나고 세션이 저장 되면  {{request.session.f_os}} 로 세션을 불러와서 출력할 수 있다.

 

서버로 실행시킬때는 프로젝트 오른쪽 마우스 - Run As - PyDev: Django 를 눌러준다.

 

그리고 브라우저에서 http://127.0.0.1:80/ 링크로 들어가면 main.html이 실행된다. 

저장 된 세션을 불러온 결과 화면

실행결과 화면은 위와 같다.

 

 

728x90

댓글