Django中cookies 和 session
1、cookies
-
1、什么是cookies
- cookies是一种存储技术,将一段文本保存在客户端(浏览器)的一种技术,并可以长时间的保存
-
2、cookies的使用场合
- 保存登录信息
- 保存用户的搜索关键词
-
3、Django中使用cookies
- 设置cookies
- ①、不使用模板
resp = HttpResponse(‘设置cookies’)
resp.set_cookie(key, value, expires)
return resp- key:cookies 的名称
- value:保存的cookies的值
- expires:保存的时间,以秒为单位
- ②、使用模板
resp = render(request, ‘login.html’, locals())
resp.set_cookie(key, value, expires)
return resp- key:cookies 的名称
- value:保存的cookies的值
- expires:保存的时间,以秒为单位
- ③、重定向
resp = HttpResponseRedirect(’/index/login/’)
resp.set_cookie(key, value, expires)
return resp- key:cookies 的名称
- value:保存的cookies的值
- expires:保存的时间,以秒为单位
- ①、不使用模板
# views.py def coo1_views(request): '''不使用模板保存cookie''' # 创建响应对象 resp = HttpResponse('设置cookies') # 通过响应对象添加 cookie resp.set_cookie(key='cookie1', value='123456', expires=86400) return resp def coo2_views(request): '''使用模板保存cookie''' resp = render(request, 'login.html', locals()) resp.set_cookie('cookie2', '222222', 86400) return resp def coo3_views(request): '''使用重定向保存cookie''' resp = HttpResponseRedirect('/index/login/') resp.set_cookie('cookie3', '333333', 86400) return resp
# 登录记住密码,保存cookie def login_views(request): if request.method == 'GET': return render(request, 'login.html') else: uphone = request.POST.get('uphone', '') upwd = request.POST.get('upwd', '') if uphone and upwd: user = User.objects.filter(uphone=uphone) if user: if upwd == user[0].upass: resp = HttpResponse('登录成功') # 判断是否记住密码 if 'issaved' in request.POST: # 保存cookie resp.set_cookie('fruitday_user', user[0].id, 86400*365) return resp else: return resp else: err = '密码错误' return render(request, 'login.html', locals()) else: err = '用户名不存在' return render(request, 'login.html', locals()) else: err = '用户名或密码不能为空' return render(request, 'login.html', locals())
- 获取cookies
- request.COOKIES
# views.py def get_coo1_views(request): cookie = request.COOKIES.get('cookie1', '') return HttpResponse(cookie)
- 设置cookies
2、session - 会话
-
1、什么是session
- session实际上是服务器为每个浏览器临时开辟的一个存储空间,用于保存相关的请求信息
-
2、session的使用场合
- 是为了存放数据而存在,通常会把服务器端要用的数据保存进session
-
3、Django中使用session
- 设置session
- request.session[‘key’] = value : 设置session的键值
- request.session.set_expiry(time) :设置过期时间,如果设置为0的话,则表示浏览器关闭则失效
- 获取session
- request.session.get(‘key’) : 获取session的值
- 删除session
- del request.session.get[‘key’] : 删除session的值
# views.py def add_session_views(request): '''添加session''' # 向 session 中存储用户的名称 request.session['uname'] = 'Sam' request.seesion.set_expiry(0) # 设置关闭浏览器后,session自动失效 return HttpResponse('OK') def get_session_views(request): '''获取session''' uname = request.session.get('uname', '') return HttpResponse(uname) # 'Sam' def del_session_views(request): '''删除session''' del request.session['uname'] return HttpResponse('已退出')
- 设置session
-
4、settings.py 文件中有段session的设置
- SESSION_COOKIE_AGE = 60 * 30 设置session的有效期为30分钟
- SESSION_EXPIRE_AT_BROWSER_CLOSE = True 设置浏览器关闭后过期
-
5、登录的流程设计
- 流程图
- 代码实现
# views.py def login_views(request): if request.method == 'POST': # POST 请求 # 实现登陆操作 uphone = request.POST.get('uphone', '') upwd = request.POST.get('upwd', '') if uphone and upwd: user = User.objects.filter(uphone=uphone) if user: # 登陆成功 if upwd == user[0].upass: # 定义一个响应对象,重定向到index页面中 resp = HttpResponseRedirect('/index/') # 将登录用户手机号存入session request.session['uphone'] = uphone # 判断是否记住密码 if 'issaved' in request.POST: # 记住密码则保存cookie resp.set_cookie('uphone', uphone, 86400*365) return resp else: # 判断密码错误! err = '密码错误' return render(request, 'login.html', locals()) else: # 判断用户名不存在! err = '用户名不存在' return render(request, 'login.html', locals()) else: # 判断用户名或密码为空! err = '用户名或密码不能为空' return render(request, 'login.html', locals()) else: # GET 请求 # 判断是否已经处于登录状态 if 'uphone' in request.session: # 有 session 时 return HttpResponseRedirect('/index/') else: # 无session # 判断cookies中是否有值 if 'uphone' in request.COOKIES: # cookie 中有值时,取出cookie的值存入 session 中 uphone = request.COOKIES['uphone'] request.session['uphone'] = uphone return HttpResponseRedirect('/index/') else: # cookie 中无值时,进入登录页面 return render(request, 'login.html')