django_session

redis保存session

测试版本

django 1.11.5
django-redis-4.10.0
redis-3.2.0
django-redis-sessions

session 信息可以存储为数据库、缓存、文件、cookie中

  • django 开启sesseion中间件–已默认开启
MIDDLEWARE = [
    'django.contrib.sessions.middleware.SessionMiddleware',
]

1. 数据库存储session

1> 添加’django.contrib.sessions’ 到 INSTALLED_APPS
2> python manage.py migrate 生成session数据库表

2.文件存储session

设置SESSION_ENGINEdjango.contrib.sessions.backends.file
注: django 默认存储文件为/tmp

3.缓存存储在Cookie

设置SESSION_ENGINEdjango.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存储数据库。

  • 安装django-redis

pip install django-redis

  • 配置缓存数据存储到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中
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"

参考

  1. https://docs.djangoproject.com/en/2.1/topics/http/sessions/
  2. https://django-redis-chs.readthedocs.io/zh_CN/latest/
  3. https://blog.csdn.net/Enjolras_fuu/article/details/79661582
  4. https://pypi.org/project/django-redis-sessions/

你可能感兴趣的:(python)