html页面获取session_Django 知识库:Session会话

本文介绍了Django中Session的工作原理,它用于解决HTTP无状态的问题。通过Session,开发者可以跟踪用户状态,例如记录匿名用户的访问次数。示例展示了如何在视图中使用Session增加计数,并展示了Session数据的保存和删除。默认Session保存时间为两周,更新复杂数据结构时需手动设置`modified=True`以保存变更。
摘要由CSDN通过智能技术生成

浏览器和 Django 服务之间的通信采用 HTTP 协议,该协议是无状态的。也就是说即使是同一个浏览器的上一次请求和下一次请求是完全独立的,服务器并不知道两次请求是否来自同一个用户。

会话(Session)就是来解决这类问题的。Session 为每个浏览器存储任意数据,并在浏览器连接时,将该数据提供给站点。Session 依赖 Cookie ,但 Cookie 中仅保存一个识别值,真正的数据是保存在数据库中的。

Django 在创建时默认开启了 Session 功能:

# settings.py

INSTALLED_APPS = [
    ...
    'django.contrib.sessions',
    ...
]

MIDDLEWARE = [
    ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    ...
]

操作起来也很友好,跟 Python 的字典有点类似。

比如利用 Session 记录匿名用户的登录次数。写视图函数:

# views.py

def session_visits_count(request):
    # 获取 visits_count 数据,若不存在则设置为 0
    count = request.session.get('visits_count', 0)
    count += 1
    # 保存 visits_count 进 session
    request.session['visits_count'] = count
    return  render(request, 'visits_count.html', context={'count': count })

路由:

# urls.py

...
urlpatterns = [
    path('visits-count/', session_visits_count, name='visits_count'),
]

模板:

# visits_count.html

...
{% block content %}
    <h4 class="col mt-4">
        您已经访问本页面:{{ count }} 次.
    </h4>
{% endblock %}

Session 的默认保存时间为 2 周,如果你想手动删除也可以:

del request.session['xxx']

通常情况下对 session 的修改会自动保存。但如果你存的是某种嵌套结构(比如字典),那么需要手动保存:

def some_view(request):
    ...
    # session 保存字典数据
    if request.session.get('deeper_count'):
        num = request.session['deeper_count']['num']
        # 此时 session 并未更新,因为更新的仅仅是字典中的数据
        request.session['deeper_count']['num'] = num + 1
        # 通知会话已修改
        request.session.modified = True
    else:
        num = 1
        request.session['deeper_count'] = {'num': num}
    return  ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值