django进阶(七)之session

session与cookie的区别

session 保留在服务器端,验证时给客户端发送随机字符串,可自定义配置,可保存在文件、缓存中,依赖cookie
cookie是一个键值对,保留在客户端

 

原理:

  登陆前:
    设置随机字符串
    写到用户浏览器cookie
    保存到session中
    在随机字符串字典中设置相应的内容
  登陆后:
    获取当前用户的随机字符串
    根据随机字符串获取对应信息

 

注意:在启用session之前,要先执行

python manage.py makemigrations
python manage.py migrate

 

session基础

视图函数views.py

def login(request):
    error_msg = ""
    if request.method == 'GET':
        return render(request,'login.html')
    elif request.method == "POST":
        u = request.POST.get('user')
        p = request.POST.get('password')
        ##如果数据库里有多个相同的数据,取第一个,如果没有就会显示none
        obj = models.UserInfo.objects.filter(username=u,password=p).first()

        if obj:         ##如果存在数据(不为空)则正确
            request.session['username'] = u          #session设置
            request.session['is_login'] = True         #session设置
            res = redirect('/cmdb/index/')
            #res.set_cookie('uname',u)
            return res
        else:
            error_msg = "用户名密码错误"
            return render(request,'login.html',{'error_msg' : error_msg})

def index(request):
    #v = request.COOKIES.get('uname')
    if request.session['is_login']:        #session判断
        return render(request,'index.html',{'current_user':request.session["username"]})
    else:
        return redirect("/cmdb/login/")

在登陆页面输入用户名密码准备提交时,审查一下元素,提交,如下为获取的cookie

 

生成的cookie保存在数据库里

 

session注销及相关参数

如果想删除某个用户的session,可直接执行

 del request.session['用户名']

 

 

 session的其他相关参数用法

 

 

在settings.py最后添加

request.session.set_expiry(value)      #设置多长时间cookie超时时间 value单位为秒
SESSION_SAVE_EVERY_REQUEST = False     # 是否每次请求都保存Session,默认修改之后才保存
SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默认)

 

设置超时时间,以及缓存机制设置

说明:登陆后10秒钟,自动清除session

 

login.html

 

views.py

 

在settings.py文件最下面添加下面参数 ,可设置每次操作后,多长时间清除session

SESSION_SAVE_EVERY_REQUEST = True

详细参考

http://www.cnblogs.com/wupeiqi/articles/5246483.html

 

cache版本的缓存设置(settings.py里设置)

 

posted @ 2018-05-03 10:17  FRESHMANS  阅读(117)  评论(0)    收藏  举报