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晓码阁 版权所有