Django中的session用法详解

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默认支持以下三种存储方式:

  1. 'django.contrib.sessions.backends.db':将Session数据存储在数据库中
  2. 'django.contrib.sessions.backends.cache':将Session数据存储在缓存中,如Redis、Memcached等
  3. '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技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • django框架学习:十八.添加创建时间DateTimeFiled

    admin后台发布文章时,一般会有创建时间和最后更新时间这2个字段,创建时间是第一次创建时添加的,最后更新时间是每次更新内容时间更新。 在models.py文件创建表时,设置create_time 和update_time 类型为DateTimeFiled,添加auto_now_add和auto_now参数。 DateTimeField 创建django的m…

    2023年4月10日
    00
  • Django进阶(一)

    Url进阶 mysit/mysit/urls.py from django.conf.urls import url from django.contrib import admin urlpatterns = [ url(r’^admin/’, admin.site.urls), ] # urlpatterns=[ # url(正则表达式,视图函数,参数,…

    Django 2023年4月11日
    00
  • Django实现分页功能

    Django是一个基于MVT模式的Web框架,提供了方便的分页功能,可以进行快速的实现。在实践中,分页功能也是Web应用中必不可少的一部分。 本文将详解Django实现分页功能的完整攻略,过程中提供代码示例。 首先,需要安装Django框架,可以使用pip进行安装。 pip install django 在视图函数中,需要对数据进行分页处理。假设有一个数据模…

    Django 2023年3月13日
    00
  • django 与 vue 的完美结合 以及NodeJS与Django协同应用开发

    django 与 vue 的完美结合 实现前后端的分离开发之后在整合 用django后端,前端用vue,做一个普通的简单系统,我就是一搞后端的,听到vue也是比较震惊,之前压根没接触过vue. 看了vue的一些文档,还有一些项目,先说一下django与vue的完美结合吧! 首先是创建一个django项目  django-admin startproject …

    Django 2023年4月11日
    00
  • Django 入门项目案例开发(中)

      关注微信公众号:FocusBI 查看更多文章;加QQ群:808774277 获取学习资料和一起探讨问题。   昨天已经描述了如何搭建Django的开发环境,今天描述业务流程,具体我们要实现一个什么样的业务;   以下的业务都是假设的(网上书店   页面做的low):   1.用户注册及登录业务:     这是一个网上书店阅读平台,用户注册后可以阅读书籍;…

    Django 2023年4月11日
    00
  • django实现查询功能

    <div class=”form-group pull-right” style=”float: left”> <form action=”” method=”get”> <input name=”q” type=”text” value=”” class=”form-control” placeholder=”请输入搜索条件”…

    Django 2023年4月11日
    00
  • 在Pycharm中调试Django项目程序的操作方法

    调试Django项目程序是开发中常见的操作,通过调试可以找出程序中的错误并解决。在Pycharm中,可以方便地进行Django项目程序的调试,并且配合debug模式可以更加方便地定位错误。下面将介绍在Pycharm中调试Django项目程序的操作方法,包含两条示例说明。 准备工作 安装Python环境 安装Pycharm(建议使用最新版) 创建Django项…

    Django 2023年5月16日
    00
  • Django ORM那些相关操作

    必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 <4> exclude(**kwa…

    Django 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部