我的项目中有这个代码,它为一个不合理的用户分配一个唯一的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'
答案 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
表
答案 2 :(得分:0)
如果您想使用数据库支持的会话,则需要添加' django.contrib.sessions'到您的INSTALLED_APPS设置。
配置完安装后,运行manage.py migrate以安装存储会话数据的单个数据库表 as specified here