Django 之 用redis存储session

方案I:

1. 安装 django-redis

liuqian@ubuntu:~$ pip install django-redis

dango-redis 官方文档:http://niwinz.github.io/django-redis/latest/#_configure_as_cache_backend

2. 配置 settings.py

CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/0",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PASSWORD": "",
#             "PARSER_CLASS": "redis.connection.HiredisParser",
#             "SOCKET_TIMEOUT": 10,
#             "CONNECTION_POOL_CLASS_KWARGS": {
#                 "max_connections": 2,
#             }
        }
    }
}
  
SESSION_COOKIE_AGE = 30 * 60 #设置session过期时间为30分钟
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

 

方案II

1. 安装 django-redis-sessions

liuqian@ubuntu:~$ pip install django-redis-sessions

django-redis-sessions 官方文档:https://pypi.org/project/django-redis-sessions/

2. 配置settings.py

SESSION_ENGINE = 'redis_sessions.session'
SESSION_REDIS = {
    'host': 'localhost',
    'port': 6379,
    'db': 0,
    'password': '',
    'prefix': 'session',
    'socket_timeout': 1
}

 

注意:

可能会遇到如下错误

只需要在settings.py 中增加下面的设置即可:

SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'

 

redis中查看:

 

 views.py中使用:

 1 # coding:utf-8
 2 from datetime import timedelta
 3 
 4 from django.shortcuts import render, redirect
 5 
 6 def login(request):
 7     '''session存redis练习'''
 8     uname = request.session.get('myname')    # 获取session的值
 9     if not uname:
10         return render(request, 'book/login.html')
11     else:
12         return render(request, 'book/welcome.html', {'name': uname})
13 
14 def do_login(request):
15     name = request.POST.get('username', 'unknow')    # 获取session的值,并给默认值
16     request.session['myname'] = name    # 设置session
17     # 设置过期时间
18     # 0 浏览器关闭就过期
19     # int  int秒后过期
20     # timedelta对象 当前时间加上timedelta后过期
21     # None 永不过期
22     request.session.set_expiry(timedelta(days=1))    # 设置session过期时间
23     return redirect('/book/login')
24 
25 def logout(request):
26     # del request.session['myname']    # 删除session
27     # request.session.clear()    # 清除所有会话
28     request.session.flush()    # 删除当前的会话数据并删除会话的Cookie
29     return redirect('/book/login')

 

posted on 2018-05-30 14:59  刘[小]倩  阅读(1633)  评论(0编辑  收藏  举报

导航