Cookie是什么?
保存在客户端浏览器上的键值对
Session是什么?
1.保存在服务端的数据(本质是键值对)
2.保存位置:有5个,需要在settings.py里面填写:
2.1 数据库(默认),SESSION_ENGINE
=
'django.contrib.sessions.backends.db'
# 引擎(默认)
2.2 缓存,SESSION_ENGINE
=
'django.contrib.sessions.backends.cache'
# 引擎
2.3 文件,SESSION_ENGINE
=
'django.contrib.sessions.backends.file'
# 引擎
2.4 缓存+数据库,SESSION_ENGINE
=
'django.contrib.sessions.backends.cached_db'
# 引擎
2.5 加密cookie,
SESSION_ENGINE
=
'django.contrib.sessions.backends.signed_cookies'
# 引擎
3. 应用:依赖cookie
作用:保持会话(Web网站)
好处:敏感信息不会直接给客户端
4. settings.py里面可以设置超时时间,每次刷新更新时间,获取、设置、删除Session中数据等操作,
详情参考:
https://www.cnblogs.com/wupeiqi/articles/5246483.html
1.views.py from django.shortcuts import render,redirect,HttpResponse def login(request): if request.method == 'GET': return render(request,'login.html') else: name = request.POST.get('name') password = request.POST.get('password') #这里省略了到数据库拿取用户名和密码 if name == 'a' and password == 's': #1.用户名和密码正确,登录成功,通过session生成随机字符串 #2.放在cookie里返回给浏览器 #3.同时数据库会自动生成django_session表,这个表生成以随机字符串为key的字典, # key对应的value也是字典,可以随意写键值对 #{ # 随机字符串1:{'username':'tom','age':18} # } #以下代码完成上面三步操作,并且给上面的value添加键值对 request.session['username'] = 'tom' request.session['age'] = 18 return redirect('/index/') else: return render(request,'login.html',{'error':'用户名或密码错误'}) #因为上面函数return redirect('/index/'),浏览器直接跳转到/index/,向服务器再次发请求。 def index(request): #1.自动获取session的随机字符串 #2.去数据库匹配这个随机字符串(key),如果匹配成功,就可以拿到value #以下这句代码完成上面两步操作 v = request.session.get('username') #如果v非空(也就是登录成功),或者如果v等于tom,都可以 if v: return HttpResponse('%s,恭喜你,登录成功'%v) else: return redirect('/login/')
2.login.html <body> <form method="POST" action="/login/"> {% csrf_token %} <p>用户名: <input type="text" name="name"> </p> <p>密码: <input type="password" name="password"> </p> <p><input type="submit" value="登录"></p>{{ error }} </form> </body>