Skip to content

Instantly share code, notes, and snippets.

@ivanjr0
Created April 20, 2012 19:14
Show Gist options
  • Save ivanjr0/2431133 to your computer and use it in GitHub Desktop.
Save ivanjr0/2431133 to your computer and use it in GitHub Desktop.
'''
Toda vez que um usuario se autentica, a sessao dele
e completamente apagada. Porem, muitas vezes outros dados
nao referentes a autenticacao sao inseridos la.
Com esse backend, e possivel definir uma lista de
chaves e/ou uma funcao, que ira avaliar entre os
indices presentes no hashmap da sessao, quais devem
ser mantidos mesmo quando 'alguem der descarga'.
- Forma de utilizar:
Configurando nos settings:
Altere a variavel 'SESSION_ENGINE' para o caminho
para a classe atual. Ex:
SESSION_ENGINE = 'doisxt.lib.django.sessions.backends.backuped_cached_db'
Defina uma lista com as chaves que devem ser mantidas. Ex:
SESSION_BACKUP_DATA = ('dados_da_tarifacao', 'secure',)
E, caso necessario, defina tambem uma funcao que
avalia se a chave deve ser mantida ou nao. Ex:
SESSION_BACKUP_VERIFIER = lambda k: k.isdigit()
'''
from django.conf import settings
from django.contrib.sessions.models import Session
from django.contrib.sessions.backends.cached_db \
import SessionStore as CachedDbStore
SESSION_BACKUP_DATA = getattr(settings, 'SESSION_BACKUP_DATA', [])
SESSION_BACKUP_VERIFIER = getattr(
settings,
'SESSION_BACKUP_VERIFIER',
lambda k: True
)
class SessionStore(CachedDbStore):
def flush(self):
self._save_configured_data()
super(SessionStore, self).flush()
self._recover_configured_data()
def _filter_configured_data(self):
return dict([ (k, self[k]) for k in self.keys() \
if k in SESSION_BACKUP_DATA or SESSION_BACKUP_VERIFIER(k) ])
def _save_configured_data(self):
self._old_data = self._filter_configured_data()
def _recover_configured_data(self):
self.update(self._old_data)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment