cookie
cookie把会话数据保存在客户端浏览器中。
但是要注意,cookie不能跨浏览器使用,并且不能保存汉字。
Django中的实现方式:
首先在应用的urls.py中设置路由
urlpatterns = [
path('login/', views.login, name='login'), # 测试设置cookie
path('index/', views.index, name='index'), # 测试获取cookie
path('logout/', views.logout, name='logout'), # 测试删除cookie
]
- 设置cookie
应用的views.py
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
print(username, password)
# 生成响应对象
res = HttpResponse('set cookie')
# 参数依次是cookie名称、cookie值、cookie的持续有效时间
res.set_cookie('username', username, max_age=3*60*60)
return res
return render(request, 'app01/login.html')
前端login.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>login</title>
</head>
<body>
<form action="{% url 'App01:login' %}" method="post">
{% csrf_token %}
username: <input type="text" name="username"> <br>
password: <input type="password" name="password"> <br>
<input type="submit">
</form>
</body>
</html>
结果
输入信息,点击提交,可以看到已经生成了cookie。
2. 获取cookie
应用的views.py
def index(request):
# 从cookie中获取用户名
username = request.COOKIES.get('username')
return render(request, 'app01/index.html', context=locals())
前端index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% if username %}
<p>
welcome {{ username }} ! <a href="{% url 'App01:logout' %}">logout</a>
</p>
{% else %}
<p>
please <a href="{% url 'App01:login' %}">login</a>
</p>
{% endif %}
</body>
</html>
结果:
如果没有cookie信息
获取到cookie则显示为
3. 删除cookie
应用的views.py
def logout(request):
res = redirect(reverse('App01:index'))
res.delete_cookie('username')
return res
session
关于用户的数据保存在服务端,在客户端cookie中加上sessionid。
可保存任意类型的数据。
注意,django中使用时,需要首先进行数据迁移,生成session使用的数据库表。
python manage.py makemigrations
python manage.py migrate
Django中的实现方式:
首先在应用的urls.py中设置路由
urlpatterns = [
path('login/', views.login, name='login'), # 测试session设置
path('index/', views.index, name='index'), # 测试session获取
path('logout/', views.logout, name='logout'), # 测试session删除
]
- session设置
应用的views.py
def login(request):
if request.method == 'POST':
# 获取用户名和密码
username = request.POST.get('username')
password = request.POST.get('password')
# 设置session
request.session['username'] = username
request.session['password'] = password
return redirect(reverse('App02:index'))
return render(request, 'app02/login.html')
前端login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>app02</title>
</head>
<body>
<form action="{% url 'App02:login' %}" method="post">
{% csrf_token %}
username: <input type="text" name="username"> <br>
password: <input type="password" name="password"> <br>
<input type="submit">
</form>
</body>
</html>
结果
输入信息,提交后生成sessionid
2. session获取
应用的views.py
def index(request):
# 获取session信息
username = request.session.get('username')
password = request.session.get('password')
return render(request, 'app02/index.html', context=locals())
前端index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>app02</title>
</head>
<body>
{% if username %}
<p>
welcome {{ username }} ! <a href="{% url 'App02:logout' %}">logout</a>
</p>
{% else %}
<p>
please <a href="{% url 'App02:login' %}">login</a>
</p>
{% endif %}
</body>
</html>
结果:
如果未获取到session信息
如果存在session信息
- session删除
应用的views.py
def logout(request):
# 从session中删除单个键值对
del request.session['username']
del request.session['password']
# 清空所有session,但是不会将session表中的数据删除
request.session.clear()
# 清空并删除session表中的数据
request.session.flush()
return redirect(reverse('App02:index'))