1 분 소요

Cart (2)

/ 세션 만들기 /

Cart session 만들기

  • cart 폴터에 cart.py , context_processors.py 생성
  • settings.py에 templates 등록

cart.py

class Cart():
    def __init__(self, request):
        self.session = request.session
        
        # Returning user = obtain his/her existing session
        cart = self.session.get('session_key')

        # New user - generate a new session
        if 'session_key' not in request.session:
            cart = self.session['session_key'] = {}
        self.cart = cart
  • 장바구니에서 crud 작업을 해야한다.
  • session 을 self.session 으로 저장한뒤 session_key 라고 이름을 설정해주고 세션이 생성되어있는지 조건문을 실행하고 세션이 생성되어 있지 않으면(신규유저 유입시) 새션을 생성해준다.
  • 세션을 딕셔너리 키값 ‘session_key’ 로 객체 cart에 다시 저장해준다.

context_processors.py

from .cart import Cart
def cart(request):
    return {'cart': Cart(request)}
  • TEMPLATES에서 좀 더 간편하게 따로 관리할 겸 따로 뺴줌
    • 뷰에 있던 어디에 있던 위치는 상관 없음

모든페이지에서 쓸 수 있게 TEMPLATES에 등록

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'store.views.categories',
                'cart.context_processors.cart',
            ],
        },
    },

  • 카테고리와 같은 원리다. cart.context_processors.cart 를 템플렛에 등록해주면 모든 페이지에서 자유롭게 사용 가능하다.

Testing the session

  • 세션 id 는 q6qydp5ubwwclizy2opaibywsg98utmn
  • 서버를 종료하고 python manage.py shell 로 진입해준다.
  • from django.contrib.sessions.models import Session 세션 모듈 불러와주고 우리가 아까 복사한 세션키를 pk 에 넣어준 뒤 객체 session_k 에 저장
  • session_k 를 디코딩하면 우리가 처음에 지정한 session_k가 출력된다. -
  • 잘 돌아가는거 확인

댓글남기기