从request开始,到response结束。
(1) Cookie:
Base64
(2)Session
(3)Token
浏览器端的会话技术,Cookie本身由浏览器生成,通过Response将Cookie写到浏览器上,下一次访问,浏览器会根据不同的规则携带Cookie过来。
Cookie不能跨浏览器。
(1)设置Cookie
# 设置Cookie
response.set_cookie(self, key, value='', max_age=None, expires=None, path='/',
domain=None, secure=False, httponly=False)
属性:
max_age
:整数,指定Cookie过期时间,单位:秒
。
0
,浏览器关闭失效None
,永不过期expires
:整数,指定Cookie过期时间,还支持一个datetime或者timedelta,可以指定一个具体的日期。
expires=timedelta(days=10)
,10天后过期。过期时间的几个关键时间。
(2)获取Cookie
# 获取Cookie
request.GET.get(key,defaultValue)
request.POST.get(key,defaultValue)
(3)加密写法
俗称:加盐
,salt字段用途为,用什么salt加密的,就要用什么salt解密。
# 加密写法
response.set_signed_cookie('uname',uname,salt='miyao')
# 解密写法
uname = request.get_signed_cookie(key='uname',salt='miyao')
用例:登录账号,并用cookie记录,进入个人页面。(一段时间内都不用再次登录即可进入个人主页)
(1)URL配置
# 根路由
urlpatterns = [
url(r'^one/',include('one.urls',namespace='second')), # app名称
]
# 子路由
urlpatterns=[
url(r'^login/',views.login,name='login'), # 登录动作
url(r'^dologin/',views.dologin,name='dologin'), # 登录成功设置Cookie
url(r'^mine/', views.mine, name='mine'), # 进入个人主页显示账号
url(r'^logout/', views.logout, name='logout'), # 登出
]
(2)视图函数
from django.shortcuts import render, redirect
from django.urls import reverse
def login(request):
return render(request,'login.html')
def dologin(request):
uname = request.POST.get('uname') # 获取值
response = HttpResponse('登录成功')
response.set_cookie('uname',uname) # 设置cookie
return response
def mine(request):
try:
uname= request.COOKIES.get('uname') # # 取值
if username:
return render(request, 'mine.html', context={'uname':uname})
except Exception as e:
print(e)
return redirect(reverse('second:login'))
def logout(request):
response = redirect(reverse('second:login'))
response.delete_cookie('uname') # 从响应中删除cookie即可。
return response
(3)模板login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form action="{% url 'second:dologin' %}" method="post">
<span>用户名:</span><input type="text" placeholder="请输入用户名" name="uname">
<br>
<button>登录</button>
</form>
</body>
</html>
模板mine.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ uname}}
<a href="{% url 'second:logout' %}">退出登录</a>
</body>
</html>
(4)访问,并填写账号
自动跳转至
访问个人主页。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200131185722524.png
需求:改为自动跳转个人主页。
使用重定向
将视图函数修改为
def login(request):
return render(request,'login.html')
def dologin(request):
uname = request.POST.get('uname') # 获取值
response = HttpResponseRedirect(reverse('second:mine')) # 重定向跳转
response.set_cookie('uname',uname)
return response