Django基础笔记5(Session)

本文详细介绍了Django中的Session机制,包括Session与cookie的区别、登录验证示例、Session的设置与使用,以及Session的相关配置。通过示例代码展示了如何在服务器端保存用户信息,实现用户会话保持,并探讨了Session的生命周期管理和安全性设置。
摘要由CSDN通过智能技术生成
Session

cookie:保存在客户端浏览器上的键值对
session:保存在服务器端的数据
      保持会话

def index(req):
    v = req.session.get('username')
    if v:
        return render(req, './App4/index.html', {'user': v})
    else:
        return render(req, './App4/login.html', {'msg': ''})


def login(request):
    if request.method == 'GET':
        return render(request, './App4/login.html', {'msg': ''})
    else:
        u = request.POST.get('username')  # 生成随机串{'username':'lhh'}
        p = request.POST.get('password')  # 通过session并保存
        key = {'username': u, 'password': p}
        obj = models.User.objects.filter(**key).first()
        if obj:
            request.session['username'] = u
            request.session['password'] = p
            return redirect('./index/')
        else:
            return render(request, './App4/login.html', {'msg': '用户名或密码错误'})
#设置
def login(request):
    if request.method == 'GET':
        return render(request, 'App5/login.html')
    else:
        user = request.POST.get('uname')
        pwd = request.POST.get('pwd')
        gender = request.POST.get('gender')
        week = request.POST.get('week')
        if gender == '1':
            obj = models.Boy.objects.filter(**{'name': user, 'passwd': pwd}).first()
        else:
            obj = models.Girl.objects.filter(**{'name': user, 'passwd': pwd}).first()
        if obj:
            user_info = {'user_id': obj.id, 'gender': gender, 'uname': user, 'nickname': obj.nickname}
            request.session['user_info'] = user_info
            return redirect('App5/index.html')
#使用
def index(request):
    v = request.session.get('user_info')
    if not v:
        return redirect('./App5/login.html')
    else:
        gender = v.get('gender')
        name = v.get('nickname')
        if gender == '1':
            user_list = models.Girl.objects.all()
        else:
            user_list = models.Boy.objects.all()
        return render(request, './App5/index.html', {'userList': user_list, 'name': name})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<!--render将request也会传过来,通过request也可以调用session-->
<h2>当前用户:{{ request.session.user_info.nickname }}</h2>
<ul>
{% for i in userList %}
<li>    {{ i.nickname }}</li>
{% endfor %}
</ul>

</body>
</html>

session相关操作:

#与字典相似
request.session.keys()
request.session.values()
request.session.items()


request.session.session_key				#用户的随机字符串
request.session.delete('session_key')	#删除当前用户的session
request.session.exists('session_key')	#检查当前用户的随机字符串是否在数据库中
request.session.flush()					#删除所有session

request.session.clear_expired()			#清除过期的session
request.session.set_expiry(value)		#设置超时时间,默认两周,单位(秒)

session相关设置:

参数意义默认
SESSION_COOKIE_NAME保存在浏览器中的key‘sessionid’
SESSION_COOKIE_PATHsession的cookie路径“\”
SESSION_COOKIE_DOMAINsession的cookie保存的域名None
SESSION_COOKIE_SECURE是否使用Https传输cookieFalse
SESSION_COOKIE_HTTPONLY是否仅使用Http传输cookieTrue
SESSION_EXPIRE_AT_BROWSER_CLOSE字面意思
SESSION_SAVE_EVERY_REQUEST是否每次刷新浏览器都更新默认时间False

上述参数均可在setting文件中更改设置

						setting.py
SESSION_COOKIE_NAME = 'sessionid'
SESSION_COOKIE_PATH = '/'
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_HTTPONLY = True
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
SESSION_SAVE_EVERY_REQUEST = False
#默认
SESSION_ENGINE='django.contrib.sessions.backends.db'	#session引擎设置	表示将session_key放入数据库


SESSION_ENGINE= 'django.contrib.sessions.backends.file'#将session存入文件
SESSION_FILE_PATH='\XX\XX'
#

SESSION_ENGINE='django.contrib.sessions.backends.cache'#放缓存

SESSION_ENGINE='django.contrib.sessions.backends.cache_db'#缓存+数据库,缓存找不着就找数据库
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刀刀777999

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值