Django在哪里存储会话?

时间:2015-05-20 06:51:58

标签: python django session

我的项目中有这个代码,它为一个不合理的用户分配一个唯一的id并将其保存在会话中:

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

Documentation表示会话存储在我的数据库中。我以为它会将它保存在django_session表中。但是,每次在会话中创建并保存唯一(上面的代码)时,不会向该表添加任何行。

然后我在Resources检查了Cookie。没有名称为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'

3 个答案:

答案 0 :(得分:5)

  

我以为它会将它保存在django_session表中。但是,每一次   在会话中创建并保存唯一(上面的代码),不添加任何行   到那张桌子。

希望每次向当前会话添加键/值时都不会添加新行。会话的数据以序列化形式存储(在django_session.session_data字段中),并且仅在启动 new 会话时添加新行 - 对会话的所有后续写入仅更新{ {1}}字段的内容。

答案 1 :(得分:1)

您和其他用户提到的唯一需要在django中使用会话的方法是:

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-更改中间件和DjangoApps后同步数据库:

    python manage.py syncdb

现在你已经完成了所有这些会议必须正常工作,因为除此之外别无他法。完成所有这些更改之后,尝试浏览您的网站使用不同的用户或没有用户进行日志记录,您应该在django_session

中成长出一些信息

您应该查看Django using sessions in views

上有关会话的文档

答案 2 :(得分:0)

  

如果您想使用数据库支持的会话,则需要添加' django.contrib.sessions'到您的INSTALLED_APPS设置。

     

配置完安装后,运行manage.py migrate以安装存储会话数据的单个数据库表   as specified here