Django中的session用法详解
什么是Session?
Session是一种客户端与服务器端的会话机制。通过Session,服务器能获得客户端的信息,从而帮助客户端完成特定需要实现的操作。在Django中,Session变量是一个字典,保存跨请求的数据。
如何开启session功能?
Django中,session功能是默认开启的。只需要在Settings中设置session相关参数,如下:
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_COOKIE_AGE = 86400 #单位秒
SESSION_COOKIE_NAME = 'sessionid' #代码中获取sessionid是使用的key
其中,SESSION_ENGINE参数用于配置Session存储方式,Django默认支持以下三种存储方式:
- 'django.contrib.sessions.backends.db':将Session数据存储在数据库中
- 'django.contrib.sessions.backends.cache':将Session数据存储在缓存中,如Redis、Memcached等
- 'django.contrib.sessions.backends.file':将Session数据存储在文件中
如何使用session?
1. 在views.py中使用session
在views.py文件中,使用以下代码获取session信息:
def index(request):
# 判断session是否存在
if 'name' in request.session:
name = request.session.get('name')
# 如果不存在,则设置name的值
else:
request.session['name'] = 'Tom'
name = request.session.get('name')
return HttpResponse('You are %s .' % name)
从上述代码可以看出,我们首先判断session是否存在,如果不存在则设置session中的某个值,并从session中获取该值。
2.在template中使用session
在Django中,我们可以在模板中使用模板变量{{ request.session.key }}获取session中的值。下面是一个示例:
<html>
<head>
<title>使用Session</title>
</head>
<body>
<div>
{% if request.session.key %}
{{ request.session.key }}
{% else %}
Session中不存在该Key
{% endif %}
</div>
</body>
</html>
示例说明
示例1:登录验证
有一个用户名和密码的登录页面,如何验证登录信息是否正确?我们可以使用Session保存用户名和密码,每次用户登录时,我们将输入的用户名和密码与Session中保存的信息进行比对,从而完成登录验证。下面是一个示例:
def login(request):
err_msg = ''
if request.method == 'POST':
# 获取用户名和密码
username = request.POST.get('username', '')
password = request.POST.get('password', '')
# 判断用户名和密码是否匹配
if username == 'admin' and password == '123456':
# 将用户名和密码保存到Session中
request.session['username'] = username
request.session['password'] = password
# 重定向到登录成功页面
return HttpResponseRedirect('/success/')
else:
err_msg = '用户名或密码错误!'
return render(request, 'login.html', {'err_msg': err_msg})
def success(request):
# 判断Session中是否存在用户名和密码
if 'username' in request.session and 'password' in request.session:
username = request.session.get('username', '')
password = request.session.get('password', '')
return render(request, 'success.html', {'username': username, 'password': password})
else:
return HttpResponseRedirect('/login/')
从上述代码中可以看出,我们在登录验证成功后,将用户名和密码保存到Session中,并在登录成功后的页面中,从Session中获取用户名和密码,并将其展示出来。
示例2:购物车功能
有一个商品列表页面和一个购物车页面,如何实现将商品添加到购物车中,以及展示购物车中的商品信息?我们可以使用Session保存购物车信息,每次用户添加商品到购物车中时,我们将商品信息保存到Session中,从而实现购物车功能。下面是一个示例:
def goods_list(request):
# 获取商品列表
goods_list = [{'id': 1, 'name': 'Apple', 'price': 5}, {'id': 2, 'name': 'Banana', 'price': 3}, {'id': 3, 'name': 'Orange', 'price': 4}]
return render(request, 'goods_list.html', {'goods_list': goods_list})
def add_goods(request):
if request.method == 'POST':
# 获取商品ID和数量
goods_id = request.POST.get('goods_id')
goods_num = request.POST.get('goods_num')
# 判断Session中是否存在购物车信息
if 'cart' in request.session:
cart = request.session['cart']
else:
cart = {}
# 判断购物车中是否已经存在该商品,如果存在则数量+1,否则添加新的商品
if goods_id in cart:
cart[goods_id]['num'] += 1
else:
cart[goods_id] = {'num': 1}
# 将购物车信息保存到Session中
request.session['cart'] = cart
return HttpResponse('添加商品到购物车成功!')
def cart(request):
cart = []
total_price = 0
# 判断Session中是否存在购物车信息
if 'cart' in request.session:
cart_dict = request.session.get('cart', {})
# 遍历购物车中所有商品,计算商品数量和总价
for goods_id in cart_dict:
goods = {
'id': goods_id,
'num': cart_dict[goods_id]['num'],
}
total_price += goods['num'] * goods['price']
cart.append(goods)
return render(request, 'cart.html', {'cart': cart, 'total_price': total_price})
从上述代码中可以看出,我们在添加商品到购物车时,将购物车信息保存到Session中,并在展示购物车信息时,从Session中获取购物车信息,并进行展示。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django中的session用法详解 - Python技术站