2013-12-08 39 views
0

我讀了contrib /會話/後端/ db.py文件,我看到什麼是數據庫中的會話存儲?

 session_key=self._get_or_create_session_key(), 
     session_data=self.encode(self._get_session(no_load=must_create)), 
     expire_date=self.get_expiry_date() 

這意味着Django的商店session_key可以,session_data是和EXPIRE_DATE。如果我有一條線

 request.session['user_id'] = "my_user_id" 

我使用Redis和Engine進行測試。 我的問題是如何將它存儲到Redis?

感謝提前!

+0

請幫我! –

回答

0

Django會話基本上是類似字典的對象,可以序列化並反序列化到會話後端(請參閱編碼,解碼)。

https://github.com/django/django/blob/master/django/contrib/sessions/backends/base.py#L87

會議編碼器使用Python泡菜(Django的-1.5)和JSON(Django的1.6+),它可以配置:

https://docs.djangoproject.com/en/dev/ref/settings/#session-serializer

您可以在Django改變會話後端設置:

https://docs.djangoproject.com/en/dev/ref/settings/#session-engine

一個默認的SES sion後端是數據庫引擎。

如果你想爲你的單元測試使用不同的Django的設置,有很多方法來覆蓋特定設置:

How to Unit test with different settings in Django?

0

不知道那是什麼你問,我假設你想知道如何在redis中存儲會話。如果是這樣的話,那麼從https://gist.github.com/mikeyk/910392讀取源代碼提供所有答案

encoded_data = self.encode(self._session) 
self.redis.setex(self._redis_key(), encoded_data, settings.SESSION_COOKIE_AGE) 

會話數據被首先編碼,然後保存使用SETEX命令Redis的。然後,當你想找回

session_data = self.redis.get(self._redis_key()) 
if session_data is not None: 
    return self.decode(force_unicode(session_data)) 

的數據是從Redis的GET現在是一個正常的字符串,然後如果你想看到實際的數據被解碼成常規的Python字典

,使用redis-cli並做keys *然後get [key]

相關問題