django默认的状态保持实现方式是基于session实现。
1、django开启session功能(默认已经开启)
INSTALLED_APPS = ['django.contrib.sessions', ]
...
MIDDLEWARE = ['django.contrib.sessions.middleware.SessionMiddleware', ]
2、生成django项目默认的数据库表
session数据默认保存在django项目的一张数据库表中(表名为:django_session)
在保存session数据库前,需要先进行数据库迁移,生成django项目默认的数据库表。
python manage.py makemigrations
python manage.py migrate
3、设置session存储方式
存储在数据库中,默认存储方式。(需要连接数据库并且已经存在对应的存放session信息的表)
SESSION_ENGINE='django.contrib.sessions.backends.db'
存储在缓存中:存储在本机内存中,如果丢失则不能找回,比数据库的方式读写更快。
SESSION_ENGINE='django.contrib.sessions.backends.cache'
混合存储:优先从本机内存中存取,如果没有则从数据库中存取。
SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
例:
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"
4、设置session过期时间
两者必须同时开启才有效
SESSION_SAVE_EVERY_REQUEST = True #每次请求都签发session
SESSION_COOKIE_AGE = 60*60*6 #有效期6小时