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: |