cookie是存在客户端的变量
“cookie 是存储于访问者的计算机中的变量。每当同一台计算机通过浏览器请求某个页面时,就会发送这个 cookie。cookie 是访问过的网站创建的文件,用于存储浏览信息,例如个人登录信息。
django如何设置cookie?
使用 HttpResponse, set_cookie函数设置
def set_cookie(request):
# cookie是不支持存储中文的,若要实现存储中文,可以转码 如base64
response=HttpResponse('设置cookie成功')
response.set_cookie('username','Mei2')
return response
Django如何获取客户端的cookie?
def get_cookie(request):
username=request.COOKIES.get('username')
print(username)
return HttpResponse('获取cookie成功,username: %s' %username)
关于设置cookie的属性,如过期时间,max_age,expires属性的使用方法,一般是使用expires+timedelta过期天数
以及cookie加盐salt 方法,即加密方法,set_signed_cookie方法,注意加密后获取cookie要进行判断,如果是空值,服务器将会报错。使用try except方式
def do_login(request):
uname=request.POST.get('uname')
# response=HttpResponse('登录的用户名为%s' %uname)
response=HttpResponseRedirect(reverse('app:mine'))
# response.set_cookie('uname',uname)
# 上面默认是浏览器关闭,则清空cookie,下面是设置60秒过期
# response.set_cookie('uname',uname,max_age=60)
# 下面是设置10天后cookie过期, datetime里的timedelta计算时间差
# response.set_cookie('uname',uname,expires=timedelta(days=10))
# 签名的,给cookie加盐,即加密cookie
response.set_signed_cookie('uname',uname,'secret')
return response
def mine(request):
# uname=request.COOKIES.get('uname')
# 注意加盐-加密的cookie如果没取到,即空值,会报错
try:
uname=request.get_signed_cookie('uname',salt='secret')
except:
return redirect(reverse('app:login'))
# 判断cookie中是否存在若不存在跳转到登录界面
if uname:
# return HttpResponse('获取到的用户名为%s' %uname)
return render(request, 'logout.html',context={'uname':uname})
return redirect(reverse('app:login'))
上面代码还可以进行优化
cookie的删除
def logout(request):
response=render(request,'login.html')
response.delete_cookie('uname')
return response
登录界面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login登录</title>
</head>
<body>
<form action="{% url 'app:do_login' %}" method="post">
<span>用户名:</span><input type="text" name="uname" placeholder="请输入用户名">
<br>
<button>登录</button>
</form>
</body>
</html>