zoukankan      html  css  js  c++  java
  • 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')
  • 相关阅读:
    我向老师问声好
    创业的27个真相:破釜沉舟时,要先学会潜水
    印象品牌:成功的标志
    稻盛和夫:打造两个世界500强的强者思维
    假如我们不曾相逢
    让我的诗句带走你的空虚
    昨日的誓言
    假如我有一百万
    我把我的青春献给你
    代腾飞(一读者为IT诗人代腾飞名字作诗)
  • 原文地址:https://www.cnblogs.com/liuq/p/9110933.html
Copyright © 2011-2022 走看看