Created
April 20, 2012 19:14
-
-
Save ivanjr0/2431133 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
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