1
0
mirror of https://github.com/django/django.git synced 2025-07-05 02:09:13 +00:00

[soc2009/multidb] Updated db-backed session to be multi-db compatible. Patch from Russell Keith-Magee.

git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/multidb@11766 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Alex Gaynor 2009-11-23 16:43:17 +00:00
parent ba0d00ddbb
commit 64d4c4c09f
3 changed files with 23 additions and 5 deletions

7
TODO
View File

@ -7,12 +7,13 @@ Required for v1.2
* Finalize the sql.Query internals * Finalize the sql.Query internals
* Clean up the use of db.backend.query_class() * Clean up the use of db.backend.query_class()
* Verify it still works with GeoDjango * Verify it still works with GeoDjango
* Resolve internal uses of multidb interface
* Update database backend for session store to use Multidb
* Check default Site creation behavior
* Resolve the public facing UI issues around using multi-db * Resolve the public facing UI issues around using multi-db
* Should we take the opportunity to modify DB backends to use fully qualified paths? * Should we take the opportunity to modify DB backends to use fully qualified paths?
* Should we clean up DATABASES['DATABASE_NAME'] to DATABASES['NAME'] etc?
* Meta.using? Is is still required/desirable? * Meta.using? Is is still required/desirable?
* Fix the regressiontests/multiple_database test failures
* Give instances knowledge of the database from which they were loaded.
* Cascade instance using to m2m queries
* Cleanup of new API entry points * Cleanup of new API entry points
* validate() on a field * validate() on a field
* name/purpose clash with Honza? * name/purpose clash with Honza?

View File

@ -1,4 +1,5 @@
import datetime import datetime
from django.conf import settings
from django.contrib.sessions.models import Session from django.contrib.sessions.models import Session
from django.contrib.sessions.backends.base import SessionBase, CreateError from django.contrib.sessions.backends.base import SessionBase, CreateError
from django.core.exceptions import SuspiciousOperation from django.core.exceptions import SuspiciousOperation
@ -9,6 +10,10 @@ class SessionStore(SessionBase):
""" """
Implements database session store. Implements database session store.
""" """
def __init__(self, session_key=None):
self.using = getattr(settings, "SESSION_DB_ALIAS", DEFAULT_DB_ALIAS)
super(SessionStore, self).__init__(session_key)
def load(self): def load(self):
try: try:
s = Session.objects.get( s = Session.objects.get(
@ -54,12 +59,12 @@ class SessionStore(SessionBase):
expire_date = self.get_expiry_date() expire_date = self.get_expiry_date()
) )
# TODO update for multidb # TODO update for multidb
sid = transaction.savepoint(using=DEFAULT_DB_ALIAS) sid = transaction.savepoint(using=self.using)
try: try:
obj.save(force_insert=must_create) obj.save(force_insert=must_create)
except IntegrityError: except IntegrityError:
if must_create: if must_create:
transaction.savepoint_rollback(sid, using=DEFAULT_DB_ALIAS) transaction.savepoint_rollback(sid, using=self.using)
raise CreateError raise CreateError
raise raise

View File

@ -1056,6 +1056,18 @@ See the :ref:`topics-http-sessions`.
.. setting:: SESSION_EXPIRE_AT_BROWSER_CLOSE .. setting:: SESSION_EXPIRE_AT_BROWSER_CLOSE
SESSION_DB_ALIAS
----------------
.. versionadded:: 1.2
Default: ``None``
If you're using database-backed session storage, this selects the database
alias that will be used to store session data. By default, Django will use
the ``default`` database, but you can store session data on any database
you choose.
SESSION_EXPIRE_AT_BROWSER_CLOSE SESSION_EXPIRE_AT_BROWSER_CLOSE
------------------------------- -------------------------------