17Django之session
1什么是session?
session是在服务器上开辟一段存储空间用于保存浏览器和服务器交互时的重要数据
2为什么没有cookie,session玩不转?
用户输入用户名密码点击登录按钮后,浏览器会把用户名和密码通过http传给后端,服务器拿到用户名和密码之后,肯定时要做数据层面的验证:
1验证有没有这个用户
2验证你的密码是否正确
3session和cookie的区别?
session是将所有的状态数据存储到服务器端,传给客户端的只是数据存储的地址标识即sessionID。
cookie是直接把所有的状态数据交给客户端自己存储,安全程度比较低,数据容易被篡改
4在django中如何使用session?
答:需要在setting.py中检查是否已经配置了session,配置方法如下(默认已经配置好):
#1在installed_apps列表中添加: INSTALLED_APPS = [ #启用session应用 'django.contrib.sessions', ] #2向middleware列表中添加: MIDDLEWARE = [ #启用session中间件 'django.contrib.sessions.middleware.SessionMiddleware' ]
5session如何使用?
session类似于字典,能够存储str,int,dict,list等类型
#1保存session的值到服务器 request.session['KEY'] = VALUE #获取session值: value = request.session['KEY'] value = request.session.get('KEY',默认值) #推荐 #删除session del request.session['KEY']
6Django如何设置session的过期时间?
在settings.py中相关配置项:
1指定sessionid在cookies中保存的时常(默认2周)
例如:SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2
2设置浏览器关闭时,session就失效(默认为False)
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
注意:django的session数据存储在数据库中,所以使用session前需要确保已经执行过migrate
7Django session的问题:
django不会自动清除数据库表里的过期session,这就会造成表数据越来越大,因此我们可以选择合适的时间使用手动方式去执行过期的数据清楚,方法是执行:python manage.py clearsessions,也可以作个定时任务,例如每晚11点自动清理过期的session数据
8小练习:
编写两个视图函数,一个用于设置session,另外一个用于获取session,要求每个函数配一个url,先执行设置,再执行获取,然后把浏览器的session清空后再执行获取看看是不是获取不到session而出现报错:
1)url:
path('set_session',views.set_session), path('get_session',views.get_session),
2)views
#存session def set_session(request): request.session['uname'] = 'zhangsan' return HttpResponse('set session is ok') #取session def get_session(request): value = request.session['uname'] return HttpResponse('session value is %s'%(value))
3)浏览器访问:
#先访问 http://127.0.0.1:8000/bookstore/set_session #再访问 http://127.0.0.1:8000/bookstore/get_session #情况浏览器session后再访问 http://127.0.0.1:8000/bookstore/get_session