cookie对于网站来说非常重要,几乎所有涉及用户登录操作的网页都需要使用cookie,如果你在浏览器中禁止掉了cookie,那么你就永远登录不上网页,你可以随便找个网站,试着禁掉浏览器的cookie,看能否登录成功,答案肯定是不行!
在django使用cookie非常简单,那么我们先来看一下cookie的使用方法:
1.获取Cookie:
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
参数:
default: 默认值
salt: 加密盐
max_age: 后台控制过期时间
2、设置Cookie:
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传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
我们可以按照上面的设置cookie的方法,来修改我们的views.py视图中的代码:
def login(request):
if request.method=='GET':
return render(request,'login.html')
if request.method=='POST':
u=request.POST.get('user')
p=request.POST.get('pwd')
if not u:
return render(request,'login.html')
if u=='root' and p=='123':#登录成功
res=redirect('/index/') #返回给用户首页
#设置cookie,关闭浏览器就会失效
res.set_cookie('username',u)
#设置cookie,5秒失效
res.set_cookie('username',u,max_age=5)
#设置cookie,截止时间失效
import datetime
cur_date=datetime.datetime.utcnow() #获取当前时间
cur_date=cur_date + datetime.timedelta(seconds=5) #当前时间加上5s钟,5s中过期
print(cur_date)
res.set_cookie('username',u,expires=cur_date)
return res
else:
return render(request,'login.html')
重点就是设置cookie的方式,代码不够完整,只需要知道设置cokie的几种方式就可以了,那么在index函数中我们就可以获取cookie,判断是否存在设这样的用户。
def index(request):
#request.COOKIES['username'] 获取获取
u=request.COOKIES.get('username') #获取登录成功设置的cookie
if not u: #如果不存在视为没有登录,返回登录页面
return redirect('/login/')
return render(request,'index.html',{'u':u})
设置cookie的方式很多,默认情况下是关闭浏览器就会失效,选择一种做一下测试就可以。
接下来再来看一下cookie加盐,就是对cookie进行加密,设置一个字符串,把这个字符串和cookie的值进行混合,可以简单参考一下代码:
def login(request):
if request.method=='GET':
return render(request,'login.html')
if request.method=='POST':
u=request.POST.get('user')
p=request.POST.get('pwd')
if not u:
return render(request,'login.html')
if u=='root' and p=='123':#登录成功
res=redirect('/index/')
#设置cookie,关闭浏览器就会失效
res.set_cookie('username',u)
res.set_signed_cookie('username',u,salt='abcdefg') #设置cookie的时候加密
cok=request.get_signed_cookie('username',u,salt='abcdefg') #在获取的时候需要解密
print(cok)
return res
else:
return render(request,'login.html')
简单了解一下即可,对cookie加密,在获取的时候就需要解密,两者操作需要一致,不然就会报错。
鳄鱼君在这里整理一种需求,针对用户的选择展示不同文章,文章用数字代替,这里还是拿自定义分页的代码来做修改。在index.html模板中添加一个选择框,让用户可以选择当前页面显示的内容数量,这里需要借助jquery.cookie.js和jquery.main.js来实现,可以自行下载引入。
<select id="a1" onchange="changePage(this)">
<option value="10">10</option>
<option value="20">20</option>
<option value="30">30</option>
</select>
<div>
{{ page_html }}
</div>
<script type="text/javascript" src="/static/jquery.min.js"></script>
<script type="text/javascript" src="/static/jquery.cookie.js"></script>
<script>
/*当页面加载完成,先获取当前显示的内容数量*/
$(function () {
var c=$.cookie('per_page_count'); /*获取cookie中的page_count,且只在/indexURL下生效*/
$('#a1').val(c);
});
function changePage(ths) {
var u=$(ths).val();
$.cookie('per_page_count',u); /*拿到当前select选择框的数值,设置到cookie中去*/
location.reload();
}
</script>
def index(request):
u=request.COOKIES.get('username')
if not u:
return redirect('/login/')
cur_page = int(request.GET.get('p', 1)) # 获取的p为字符串,直接转换为int
val=int(request.COOKIES.get('per_page_count')) #获取js设置的cookie
print(val)
#获取用户选择的值,就可以进行控制,显示对应数量的内容
return render(request,'index.html',{'u':u})
在index.html页面添加一个选择框,让用户选择当前页面显示的内容数量,用户选择之后,使用js获取并添加到per_page_count的cookie中去,后台获取到它并作出相应的控制,可以自己实现一下,需要注意这里可能存在cookie的污染,你在后台获取到的是一个:%5Bobject%20Object%5D,关闭浏览器或者清楚缓存在做测试。
使用js设置cookie可以添加参数,跟django中cookie的参数一样,互相参照一下就可以了,这里不再过多说明了!
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!