django 笔记12 session

第一步写好函数,然后生成数据库session表
python manage.py makemigrations
python manage.py migrate

session原理:
1、Session

    基于COokie做用户验证时:
        不建议添加敏感信息;
        优点:服务器压力减小

        Cookie是保存在用户浏览器端的键值对
        Session是保存在服务器端的键值对  依赖cookie 即随机字符串

session = {
    随机字符串1:{
        'is_login': True,
        'user':'''
        'nid':
        ...
    }
    随机字符串2:{
        'is_login':True,
        'user':'''
        'nid':
        ...
    }
}

    a.Session原理
    b.Cookie和Session对比
    c.Session配置(缺少cache)
    d.实例 实现两周的自动登录
        -request.session.set_expiry(60*10)
        -SESSION_SAVE_EVERY_REQUEST = True

    PS: cookie中不设置超时时间, 则表示关闭浏览器自动清除

request.session['k1']
request.session.get('k1',none)

request.session['k1'] = 123
request.session.setdefault('k1', 123)

request.session.clear() 注销时用
del request.session['k1']

requeset.session.keys()
requeset.session.values()

用户session的随机字符串
request.session.session_key 获取当前人的随机字符串 一般用不着

将所有session失效日期小于当前日期的数据删除
request.session.clear_expired()

检测用户session的随机字符串在数据库中是否存在
request.session.exists("session_key") 基本不用

默认session的超时时间是两周
request.session.set_expiry(value)
    *如果value是个整数, session会在些秒数后失效
    *如果value是个datatime或timedelta session就会在这个时间后失效
    *如果value是0 用户关闭浏览器session就会失效

在settings上设置这句
SESSION_SAVE_EVERY_REQUEST = True 表示页面刷新 超时时间也跟着刷新

原理      session依赖cookie
          随机字符串
          对服务器中的session操作
            request.session.get() #获取值
            request.session[x] = x 设置值

            request.session.clear() 注销时

          -配置文件中设置默认操作:
          SESSION_COOKIE_AGE = 1209600
          SESSION_SAVE_EVERY_REQUEST = True

          SESSION保存在哪里!  默认在数据库 
          引擎的配置
          SESSION_ENGINE = 'django.contrib.sessions.backends.db'默认数据库#保存在数据库中  当中的是可以换!!
          可以选择放在缓存,文件,数据库,加密cookie, 缓存加数据库

          如果缓存:
          SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
          SESSION_CACHE_ALIAS = 'default'  #名字

          默认CACHES中没有redis引擎  django默认不支持redis 只有memerch



def login(request):
    if request.method == "GET":
        return render(request,'login.html')
    elif request.method == 'POST':
        user = request.POST.get('user')
        pwd = request.POST.get('pwd')
        if user == 'root' and pwd =='123':
            #生成随机字符串
            #写到用户浏览器cookie
            #保存到session中
            #在随机字符串对应的字典中设置相关内容
            request.session['username'] =user #这句话将上面四句话解决
            request.session['is_login'] = True
            request.session.set_expiry(10)
            return redirect('/index')
        else:
            return render(request,'login.html')

def index(request):
    #获取当前用户的随机字符串
    #根据随机字符串获取对应的信息
    if request.session['is_login']:
        return HttpResponse(request.session['username'])
    else:
        return HttpResponse('no ok')

猜你喜欢

转载自www.cnblogs.com/Liang-jc/p/9220547.html