web/lib/django/contrib/sessions/backends/db.py
changeset 29 cc9b7e14412b
parent 0 0d40e90630ef
equal deleted inserted replaced
28:b758351d191f 29:cc9b7e14412b
     1 import datetime
     1 import datetime
       
     2 from django.conf import settings
     2 from django.contrib.sessions.models import Session
     3 from django.contrib.sessions.models import Session
     3 from django.contrib.sessions.backends.base import SessionBase, CreateError
     4 from django.contrib.sessions.backends.base import SessionBase, CreateError
     4 from django.core.exceptions import SuspiciousOperation
     5 from django.core.exceptions import SuspiciousOperation
     5 from django.db import IntegrityError, transaction
     6 from django.db import IntegrityError, transaction, router
     6 from django.utils.encoding import force_unicode
     7 from django.utils.encoding import force_unicode
     7 
     8 
     8 class SessionStore(SessionBase):
     9 class SessionStore(SessionBase):
     9     """
    10     """
    10     Implements database session store.
    11     Implements database session store.
    11     """
    12     """
       
    13     def __init__(self, session_key=None):
       
    14         super(SessionStore, self).__init__(session_key)
       
    15 
    12     def load(self):
    16     def load(self):
    13         try:
    17         try:
    14             s = Session.objects.get(
    18             s = Session.objects.get(
    15                 session_key = self.session_key,
    19                 session_key = self.session_key,
    16                 expire_date__gt=datetime.datetime.now()
    20                 expire_date__gt=datetime.datetime.now()
    51         obj = Session(
    55         obj = Session(
    52             session_key = self.session_key,
    56             session_key = self.session_key,
    53             session_data = self.encode(self._get_session(no_load=must_create)),
    57             session_data = self.encode(self._get_session(no_load=must_create)),
    54             expire_date = self.get_expiry_date()
    58             expire_date = self.get_expiry_date()
    55         )
    59         )
    56         sid = transaction.savepoint()
    60         using = router.db_for_write(Session, instance=obj)
       
    61         sid = transaction.savepoint(using=using)
    57         try:
    62         try:
    58             obj.save(force_insert=must_create)
    63             obj.save(force_insert=must_create, using=using)
    59         except IntegrityError:
    64         except IntegrityError:
    60             if must_create:
    65             if must_create:
    61                 transaction.savepoint_rollback(sid)
    66                 transaction.savepoint_rollback(sid, using=using)
    62                 raise CreateError
    67                 raise CreateError
    63             raise
    68             raise
    64 
    69 
    65     def delete(self, session_key=None):
    70     def delete(self, session_key=None):
    66         if session_key is None:
    71         if session_key is None: