Django 笔记之 Session

Django为匿名会话提供全面支持。 会话框架允许您基于每个站点访问者存储和检索任意数据。

安装

session 通过中间件实现的
app:django.contrib.sessions
middleware:django.contrib.sessions.middleware.SessionMiddleware

配置

  • 数据库
    • 默认方便
  • 缓存
    • 表现更好,要配置了缓存
  • 文件
  • cookie
    • django.contrib.sessions.backends.signed_cookies 签名加密

View里使用

session 激活后,所有 request 都有 session 属性;如字典,可任意读写。

backends.base.SessionBase 方法:

  • get(key, default=None)
  • pop(key, default=None)
  • keys()
  • items()
  • setdefault()
  • clear()

session 序列化

默认 JSON serializers.JSONSerializer

若用 pickle serializers.PickleSerializer,SECRET_KEY 泄露会很危险。

一些准则

  • 只用 str 作为 key
  • 下划线开头的不可以(被保留了)
  • 只读不写

用例

login 增加会话

def login(request):
    m = Member.objects.get(username=request.POST['username'])
    if m.password == request.POST['password']:
        request.session['member_id'] = m.id
        return HttpResponse("You're logged in.")
    else:
        return HttpResponse("Your username and password didn't match.")

logout 删除会话

def logout(request):
    try:
        del request.session['member_id']
    except KeyError:
        pass
    return HttpResponse("You're logged out.")

检测客户端是否使能 cookies

典型用法

from django.http import HttpResponse
from django.shortcuts import render

def login(request):
    if request.method == 'POST':
        if request.session.test_cookie_worked():
            request.session.delete_test_cookie()
            return HttpResponse("You're logged in.")
        else:
            return HttpResponse("Please enable cookies and try again.")
    request.session.set_test_cookie()
    return render(request, 'foo/login_form.html')

何时session保存

仅当 session 的值添加或删除或修改时,session 保存。

但是request.session['foo']['bar'] = 'baz' 这种修改值的属性不会保存。要手动标记成已修改
request.session.modified = True

清理session储存

不清理的话,存session的数据表或文件夹会越来越大。
cache 不会,会自动清理。
清理命令 clearsessions

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值