2013-12-08 2 views
0

Я прочитал вно/сессии/бэкенд/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() 

Это значит Джанго магазин 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 backends - это механизм базы данных.

Если вы хотите использовать различные настройки 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) 

Данные сеанса первый закодированы и затем сохранить в Redis с помощью SETEX команды. Затем, когда вы хотите получить его

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

Данные GET от Redis, который в настоящее время нормальная строка, а затем декодируется в регулярные Python Dict

Если вы хотите, чтобы увидеть фактические данные, используйте redis-cli и do keys * затем get [key]

Смежные вопросы