Cookie基础
相关代码
from django.conf.urls import url, include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^cookie/', include('cookie.urls')), ]
urlpatterns = [ url(r'^test1/', views.test1_view), ]
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.http import HttpResponse from django.shortcuts import render import datetime # Create your views here. def test1_view(request): response = HttpResponse() # 三天有效时间 # response.set_cookie("uname", "zhangsan", expires=datetime.date.today()+datetime.timedelta(days=3), path='/') # cookie被所有页面共享 # response.set_cookie("uname", "zhangsan", max_age=3*24*60*60, path='/') # cookie仅仅被登录界面所用 response.set_cookie("uname", "zhangsan", max_age=3 * 24 * 60 * 60, path='/cookie/login/') return response
上面三张图证明了,当设置path='/'时,cookie会被所有页面所共享,这个不是我们想要的,一般cookie只要被特定的页面所使用就好;
当修改代码path='/cookie/login/'之后,我们再来做测试,测试结果如下:
先执行一下它,用来设置cookie(操作之前请清除浏览器缓存)
http://127.0.0.1:8000/cookie/test1/
再来执行一个任意的请求URL
http://127.0.0.1:8000/cookie/sdfsdf/
再来请求指定的URL
http://127.0.0.1:8000/cookie/login/
接下来我们来操作cookie,给http://127.0.0.1:8000/cookie/login/定义一个视图
urlpatterns = [ url(r'^test1/', views.test1_view), url(r'^test2/', views.test2_view), url(r'^login/', views.login_view), ]
# -*- coding: utf-8 -*- from __future__ import unicode_literals from django.http import HttpResponse from django.shortcuts import render import datetime # Create your views here. def test1_view(request): response = HttpResponse() # 三天有效时间 # response.set_cookie("uname", "zhangsan", expires=datetime.date.today()+datetime.timedelta(days=3), path='/') # cookie被所有页面共享 # response.set_cookie("uname", "zhangsan", max_age=3*24*60*60, path='/') # cookie仅仅被登录界面所用 response.set_cookie("uname", "zhangsan", max_age=3 * 24 * 60 * 60, path='/cookie/login/') return response # 加盐的方式设置cookie def test2_view(request): response = HttpResponse() response.set_signed_cookie("uname", "zhangsan", max_age=3 * 24 * 60 * 60, path='/cookie/login/',salt='javaxl') return response # 操作cookie(如果该cookie不存在报下列错误) # KeyError at /cookie/login/ # u'uname' def login_view(request): response = HttpResponse() # 获取cookie # 普通 # u1 = request.COOKIES['uname'] # u2 = request.COOKIES.get('uname', '') # print u1 # print u2 # 加盐 u3 = request.get_signed_cookie('uname', salt='javaxl') print u3 # 删除cookie response.delete_cookie('uname', path='/cookie/login/') return response
相关总结
#### 删除值 ``` #设置过期 1. 默认情况关闭浏览器就失效 2. max_age=-1(单位秒) 3. expires=datetime.datetime.today()+datetime.timedelta(days=-2)(单位日期类型) 4. response.delete_cookie('uname',path='/cookie/login/') ``` #### 涉及属性 ``` 1、max_age=1 :cookie生效的时间,单位是秒 2、expires:具体过期日期 3、path='/':指定那个url可以访问到cookie;'/'是所有 path='/' 4、domain=None(None代表当前域名):指定那个域名以及它下面的二级域名(子域名)可以访问这个cookie domain='.baidu.com' ``` ``` #获取cookie def abc_view(request): #返回所有cookie数据 print request.COOKIES #返回KEY='uname'的数据 print request.get_signed_cookie('uname',salt='javaxl') return HttpResponse('hello') ```
三天免登陆案例
子路由配置
urlpatterns = [ url(r'^test1/', views.test1_view), url(r'^test2/', views.test2_view), url(r'^login/', views.login_view), url(r'^login_cookie/$', views.login_cookie_view), ]
视图处理方法
# 三天免登陆 def login_cookie_view(request): if request.method == 'GET': # 判断request中是否存在'login'对应cookie信息 if request.COOKIES.has_key('login'): # 'zhangsan,123' login = request.COOKIES.get('login', '').split(',') sname = login[0] spwd = login[1] return render(request, 'login_cookie.html', {'sname': sname, 'spwd': spwd}) return render(request, 'login_cookie.html') else: # 获取请求参数 sname = request.POST.get('sname') spwd = request.POST.get('spwd') flag = request.POST.get('flag') response = HttpResponse() # 判断是否登录成功 if sname == 'zhangsan' and spwd == '123': response.content = '登录成功!' # 判断是否需要记住密码 if flag: # 将用户名和密码存放至cookie中('zhangsan,123') response.set_cookie('login', sname + ',' + spwd, max_age=3 * 24 * 60 * 60, path='/cookie/login_cookie/') else: # 当不需要记住密码时,需要删除cookie中‘login’对应的数据 response.delete_cookie('login', path='/cookie/login_cookie/') else: # 当登录失败时,需要删除cookie中‘login’对应的数据 response.delete_cookie('login', path='/cookie/login_cookie/') # 重定向 response.status_code = 302 response.setdefault('Location', '/cookie/login_cookie/') return response
页面
测试方式
输入地址:http://127.0.0.1:8000/cookie/login_cookie/
默认是会记住密码的,第一次输入用户名密码,下次就不要输入了;
如果把复选框去掉,那么就不会记住用户名密码,下次登录还是要输入;
如果记住了用户名密码,下次改了用户名密码,登录失败,会将cookie删除,这是需要再次输入用户名密码信息;
over......
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有