测试版本
django 1.11.5
django-redis-4.10.0
redis-3.2.0
django-redis-sessions
session 信息可以存储为数据库、缓存、文件、cookie中
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
]
1. 数据库存储session
1> 添加’django.contrib.sessions’ 到 INSTALLED_APPS
2> python manage.py migrate 生成session数据库表
2.文件存储session
设置SESSION_ENGINE为django.contrib.sessions.backends.file
注: django 默认存储文件为/tmp
3.缓存存储在Cookie
设置SESSION_ENGINE为django.contrib.sessions.backends.signed_cookies
4. 缓存存储session
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
当配置了缓存,你有俩种方式把数据存储到缓存中
1>. 数据只存储到到缓存中,数据不持久化到数据库中,当缓存满了或者重启后,数据将全部丢失
2>. 将数据持久保存到数据库中,SESSION_ENGINE 为"django.contrib.sessions.backends.cached_db". 这样每次写数据到缓存,同时也会写入到数据库中,数据库中保持了状态,这种方式,还需要配置session存储数据库。
pip install django-redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
可以不同粒度的缓存数据到redis,一般缓存view或者整个网站
1. 缓存view,整个页面
from django.views.decorators.cache import cache_page
@cache_page(60 * 15)
def index(request):
return HttpResponse('hello world')
2. 全网站缓存
需要在settings.py文件中的MIDDLEWARE项添加相应的中间件:
MIDDLEWARE = [
'django.middleware.cache.UpdateCacheMiddleware', # 放在第一个
...其他中间件...
'django.middleware.cache.FetchFromCacheMiddleware', # 放在最后一个
]
# 另外的配置项
CACHE_MIDDLEWARE_SECONDS= 60 # 每个页面缓存的时间(单位:秒)
CACHE_MIDDLEWARE_ALIAS='xxx'
SESSION_REDIS = {
'host': 'localhost',
'port': 6379,
'db': 0,
'password': 'xx',
'prefix': 'session',
'socket_timeout': 1
}
SESSION_ENGINE = 'redis_sessions.session'
------------------------------------------------------------------
eg:
def set_session(request):
""""保存session数据"""
request.session['username'] = 'Django'
request.session['verify_code'] = '123456'
return HttpResponse('保存session数据成功')
def get_session(request):
"""获取session数据"""
username = request.session.get('username')
verify_code = request.session.get('verify_code')
text = 'username=%s, verify_code=%s' % (username, verify_code)
return HttpResponse(text)
通过redis-cli客户端可以查看
127.0.0.1:6379> select 4
OK
127.0.0.1:6379[4]> keys *
1) "session:0bjyuegx0i5ivyuzpb8ezgo0b35u2z4v"
参考
- https://docs.djangoproject.com/en/2.1/topics/http/sessions/
- https://django-redis-chs.readthedocs.io/zh_CN/latest/
- https://blog.csdn.net/Enjolras_fuu/article/details/79661582
- https://pypi.org/project/django-redis-sessions/