2015-05-20 8 views
6

У меня есть этот код в моем проекте, который присваивает уникальный идентификатор к anomymous пользователя и сохраняет его в сессии:Где хранятся сеансы Django?

user_id = str(uuid.uuid4())[:5] 
request.session['nonuserid'] = user_id 

Documentation говорит, что сессии сохраняются в моей базе данных. Я думал, что он сохранит его в таблице django_session. Тем не менее, каждый раз, когда уникальный и создается в сеансе (выше кода), ни одна строка не добавляется в эту таблицу.

Затем я проверил печенья в Resources. Нет ключа с именем nonusedid. Только некоторые sessionid

Итак, где хранятся данные сеанса, которые я создал?

Соответствующая часть Settings.py

MIDDLEWARE_CLASSES = (
    # Default Django middleware. 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

DJANGO_APPS = (
    # Default Django apps: 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
) 

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' 
+0

Можете ли вы показать нам settings.py? –

+0

@ KishorPawar см. Мой обновленный вопрос –

ответ

4

Я думал, что он сохранит его в таблице django_session. Однако каждый раз уникальный и созданный и сохраненный в сеансе (выше кода), ни одна строка не добавляется к этой таблице.

Надеемся, что новая строка не добавляется каждый раз, когда вы добавляете ключ/значение в текущую сессию. Данные сеанса хранятся в сериализованной форме (в поле django_session.session_data), а новая строка добавляется только при запуске нового сеанса - все последующие записи на сеанс будут только обновлять содержимое поля session_data.

+0

спасибо вам большое :) –

0

Если вы хотите использовать сеанс базы данных спинками, вам нужно добавить «django.contrib.sessions» вашей установке INSTALLED_APPS.

После того, как вы настроили свою установку, запустите команду manage.py migrate, чтобы установить единую таблицу базы данных, в которой хранятся данные сеанса.
as specified here

+0

Я уже сделал это –

1

нужно только использовать сессии в Джанго, как упоминалось Вами и другие пользователи:

1- Добавить SessionMiddleware в MiddlewareClasses (у вас уже есть):

MIDDLEWARE_CLASSES = (
    # Default Django middleware. 
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
) 

2- Добавить django.contrib.sessions в установленные приложения (у вас уже есть):

DJANGO_APPS = (
    # Default Django apps: 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
) 

3- Синхронизация база данных после изменения Middleware и DjangoApps:

python manage.py syncdb 

Теперь, когда вы сделали все эти сессии должны работать, потому что больше нет дальше. После того, как вы все это меняет пытается прибой для вашего сайта протоколирования с различными пользователями или без пользователя, и вы должны быть некоторые сведения растет в django_session таблице

Вы должны проверить документацию сессий на Django using sessions in views

+0

Я уже делал 'python manage.py migrate' –

+0

@JohnyStark извините за мой предыдущий комментарий, вы используете последнюю версию Django? 1,8? В этой версии ** мигрировать ** заменяет ** syncdb ** – AlvaroAV

+0

Вам следует попробовать сделать ** syncdb ** или ** makemigrations **, а затем ** мигрировать ** – AlvaroAV

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