관리 메뉴

웹개발자의 기지개

[Django] 세션변수 - 템플릿 View에서 세션 사용하기 request.session 본문

python/Django

[Django] 세션변수 - 템플릿 View에서 세션 사용하기 request.session

http://portfolio.wonpaper.net 2022. 4. 24. 07:20

세션 사용 설정하기

INSTALLED_APPS = [
    ...
    'django.contrib.sessions',
    ....

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    ....

https://developer.mozilla.org/ko/docs/Learn/Server-side/Django/Sessions

 

Django Tutorial Part 7: Sessions framework - Web 개발 학습하기 | MDN

이 튜토리얼에서는 LocalLibrary website을 확장시킬 것입니다. 방문 수를 셀 수 있는 session-based 기능을 더한 홈페이지입니다. 이것은 상대적으로 간단한 예제인데, 이는 당신의 홈페이지에서 익명의

developer.mozilla.org

 

# Session object not directly modified, only data within the session. Session changes not saved!
request.session['my_car']['wheels'] = 'alloy'

# Set session as modified to force data updates/cookie to be saved.
request.session.modified = True

 

관련앱의 view.py 상에서는 아래와 같이

 

if not request.session.session_key:
    cart_uid = request.session.create()
else:
    cart_uid = request.session.session_key

위의 소스에서 request.session.session_key 는 str형의 유니크한 세션id값을 리턴해준다.

ex) s7j4bkdqge4afl3hbicl1tocp0la14cd

 

마치 php상에서 session_id() 값과 동일하다고 보면된다.

 

https://docs.djangoproject.com/en/4.0/topics/http/sessions/

 

How to use sessions | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

 

# 세션 설정

request.session['m_id'] = "test1"
request.session['m_name'] = "이순신"

 

# 세션 불러오기1

m_id = request.session['m_id']
m_name = request.session['m_name']

 

# 세션 불러오기2 

m_id = request.session.get('m_id', '')
m_name = request.session.get('m_name', '')

 

위에서 get함수 두번째 인자는 세션값이 없을때 default로 지정해주는 값이다.

 

# 세션값 삭제

del request.session['m_id'] 

request.session.flush()

 

보통의 경우 Templates 실제 파일내에서는 위와 같은 세션값을 이용할 수 없다.

그렇다면 이를 해결해보자.

 

settings.py 에서 아래의 소스를 추가하자.

 

1
2
3
TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request',
)
cs

 

그리고, 이제는 templates 실제 html 에서

아래와 같이 세션 값을 직접 활용할 수 있다.

 

 

1
2
3
4
5
6
7
8
{% if not 'm_id' in request.session %}
    <a href="/member/register">[회원가입]</a><br>
    <a href="/member/login">[로그인]</a>
{% else %}
    {{ m_name }} 님 어서오세요.
    <br><br>
    <a href="/member/logout">[로그아웃]</a>
{% endif %}
cs

 

{{ request.session.m_name }} 님 어서오세요.

 

 

참고 1 : https://gauryan.tumblr.com/post/61847882548/template-session

참고 2 : https://blog.daum.net/hanabible/1172


Comments