cookie的理解能够为,存放在用户浏览器上的一个文件,里面是键值对数据,用于跟服务端通信。前端能够经过jquery cookie插件设置和读取,后端直接设置html
一、获取Cookie:前端
1
2
3
4
5
6
|
request.COOKIES[
'key'
]
request.get_signed_cookie(key, default
=
RAISE_ERROR, salt
=
'', max_age
=
None
)
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过时时间
|
二、设置Cookie:python
1
2
3
4
5
6
7
8
9
10
11
12
13
|
rep
=
HttpResponse(...) 或 rep = render(request, ...)
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt
=
'加密盐'
,...)
参数:
key, 键
value
=
'', 值
max_age
=
None
, 超时时间
expires
=
None
, 超时时间(IE requires expires, so
set
it
if
hasn't been already.)按日期时间算
path
=
'/'
, Cookie生效的路径,
/
表示根路径,特殊的:跟路径的cookie能够被任何url的页面访问
domain
=
None
, Cookie生效的域名
secure
=
False
, https传输,网站走https时要加上
httponly
=
False
只能http协议传输,没法被JavaScript获取(不是绝对,底层抓包能够获取到也能够被覆盖)
|
因为cookie保存在客户端的电脑上,因此,JavaScript和jquery也能够操做cookie,如设置和获取。jquery
后端设置加密的cookie:django
res=redirect('/home')
res.set_signed_cookie('user1',u,max_age=5,salt='123')
后端获取加密cookie:
v = request.get_signed_cookie(key='user1',salt='123')
简单例子:后端
views:浏览器
1 from django.shortcuts import render,HttpResponse,redirect 2 3 dic = { 4 "tom":{"pwd":'123'}, 5 "lily":{"pwd":'111'} 6 } 7 def login(request): 8 if request.method=="GET": 9 return render(request,'login.html') 10 u=request.POST.get('user') 11 pwd=request.POST.get('pwd') 12 if dic.get(u): 13 if dic[u]["pwd"]==pwd: 14 res=redirect('/home') 15 # res.set_cookie('user1',u) #不设置缓存有效时间,浏览器重启后失效 16 # res.set_cookie('user1',u,max_age=5) #设置max_age指定多少秒后失效 17 import datetime 18 curr_time=datetime.datetime.now() 19 expire_time=curr_time + datetime.timedelta(seconds=5) 20 print(curr_time,expire_time) 21 res.set_cookie('user1',u,expires=expire_time) #设置max_age指定多少秒后失效 22 return res 23 else: 24 return redirect('/login') 25 return redirect('/login') 26 27 def home(request): 28 v = request.COOKIES['user1'] 29 if not v: 30 return render(request,'login.html') 31 32 33 return render(request,'home.html',{"curr_user":v})
templates:缓存
1 login.html 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>Title</title> 7 </head> 8 <body> 9 <form action="/login" method="post"> 10 <input type="text" name="user" placeholder="用户名" /> 11 <input type="text" name="pwd" placeholder="密码" /> 12 <input type="submit"/> 13 </form> 14 </body> 15 </html> 16 17 home.html 18 <!DOCTYPE html> 19 <html lang="en"> 20 <head> 21 <meta charset="UTF-8"> 22 <title>Title</title> 23 </head> 24 <body> 25 <h1>欢迎你,{{ curr_user }}</h1> 26 </body> 27 </html>
额外功能views:cookie
def page(request): list = [] #生成要发给前端的数据列表 for i in range(1,779): list.append(i) cur_page = request.GET.get('page') if not cur_page: cur_page = 1 else: cur_page = int(cur_page) obj = paginations.page_mod(data=list,cur_page=cur_page,dis_count=10,tray_len=7) data = obj.per_page_data #分页后的内容 nav_str = obj.page_str("/page") #分布后的导航 return render(request,'page.html',{'list':data,'dis_list':nav_str}) dic = { "tom":{"pwd":'123'}, "lily":{"pwd":'111'} } def login(request): if request.method=="GET": return render(request,'login.html') u=request.POST.get('user') pwd=request.POST.get('pwd') if dic.get(u): if dic[u]["pwd"]==pwd: res=redirect('/home') res.set_cookie('user1',u) #不设置缓存有效时间,浏览器重启后失效 # res.set_cookie('user1',u,max_age=5) #设置max_age指定多少秒后失效 res.set_cookie('user1',u,path='/home') #设置生效url,只在规定uri路径下才能获取当前设置的cookie # import datetime # curr_time=datetime.datetime.now() # expire_time=curr_time + datetime.timedelta(seconds=5) # print(curr_time,expire_time) # res.set_cookie('user1',u,expires=expire_time) #设置max_age指定多少秒后失效 return res else: return redirect('/login') return redirect('/login') def home(request): v = request.COOKIES.get('user1') if not v: return render(request,'login.html') return render(request,'home.html',{"curr_user":v})
...app