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이 실행된다.
실행결과 화면은 위와 같다.
'Programming > Django' 카테고리의 다른 글
Django / TensorFlow / Keras 개념 / 이항 분류 모델 작성 (0) | 2021.03.24 |
---|
댓글