Django框架下的Session操作
1、首先编写login.html登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
<script type="text/javascript" src="/static/js/jquery-3.4.1.js"></script>
<script type="text/javascript" src="/static/login/login.js"></script>
<style>
#login-btn{
outline: none;
border: none;
}
</style>
</head>
<body>
<div class="container">
<div class="row">
<div class="col-md-3 col-lg-offset-3">
<div>
<form>
{% csrf_token %}
<div class="form-group">
用户名<input type="text" id="user" class="form-control">
</div>
<div class="form-group">
密码<input type="password" id="pwd" class="form-control">
</div>
<input type="button" value="登录" id="login-btn" class="btn btn-success pull-right">
<p class="error"></p>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
2、编写登录后跳转index.html页面,跳转页面上面有session注销用户登录按钮
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h3>上次登录时间:{{ last_visit_time }}</h3>
<h2>Hi! {{ username }}</h2>
<a href="/login_out/">注销</a>
</body>
</html>
3、利用jquery, ajax编写用户验证登录,
$(function () {
$('#login-btn').click(function () {
$.ajax({
url: '',
type: 'post',
data:{
user: $('#user').val(),
pwd: $('#pwd').val(),
// 因利用ajax验证用户登录需要添加如下:
csrfmiddlewaretoken: $("[name='csrfmiddlewaretoken']").val()
},
success:function (data) {
if (data.user){
location.href='/index/'
}else{
$('.error').text(data.msg).css({
color: 'red',
})
}
}
})
});
});
4、Django框架session操作,验证用户登录
def login(request):
import datetime
"""
设置session
request.session['is_login'] = True #设置session为True判断为登录成功
request.session['username'] = status.user #设置session获取用户名
步骤:
1 生成一个随机字符串: "fkg8qxjby49c25jx9s1h4g7tgfvrhbgq"
2 response.set_cookie(sessionid , fkg8qxjby49c25jx9s1h4g7tgfvrhbgq)
3 在diango-session 表中创建一条记录
session_key session_data expire_date
fkg8qxjby49c25jx9s1h4g7tgfvrhbgq OTJiYWMyNzQwMTkwZWQ3YWQzMDQ2YmY...... 时间日期
4 不同的账户在相同游览器第一次登录django-session表里面会添加一条记录,如果相同的游览器不同的账户登录过,django-session表
session_key对应的key数据不会变,session_daa,expire_date数据会更新,
"""
if request.method == "POST":
user = request.POST.get('user')
pwd = request.POST.get('pwd')
status = UserInfo.objects.filter(user=user, pwd=pwd).first()
msg = {"user": None, 'msg': None}
if status:
msg['user'] = status.user
# 设置session
request.session['is_login'] = True
request.session['username'] = status.user
# 设置登录时间
now_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
request.session['last_visit_time'] = now_time
else:
msg['msg'] = '账户或密码输入错误'
return JsonResponse(msg)
return render(request, 'login/login.html')
def login_out(request):
"""
del request.session['is_login'] 只会删除is_login一个键值,djiango_session表对应的session_data
列存储的对应的数据,不推荐使用这个方法进行注销操作
request.session.flush():删除当前会话数据并删除会话Cookie。这用于确保前面的会话数据不可以再次被用户游览访问
flush()对应操作:
1 首先获取 sessionid = request.COOKIE.get('sessionid')
2 进行查找删除django-session.objects.filter(session-key=sessionid).delete()
3 进行cookie删除 response.delete_cookie('sessionid', sessionid)
:param request:
:return:
"""
# del注销删除方法不推荐使用
# del request.session['is_login']
# 推荐使用flush方法
request.session.flush()
return redirect('/login/')
def index(request):
"""
获取djanog_session表数据request.session.get('is_login') is_login:是设置session时key主键
:param request:
:return:
"""
is_login = request.session.get('is_login')
# is_login获取为True代表登录成功,可以访问设置的session页面,否则跳转到登录页面登录后才能访问
if is_login:
# 获取session设置用户名
username = request.session.get('username')
# 获取session设置登录时间
last_visit_time = request.session.get('last_visit_time')
return render(request, "login/index.html", locals())
else:
return redirect('/login/')
5、Django默认支持Session,并且默认是将Session数据存储在数据库django_session表中。session相关参数,需要在settings.py文件里面设置
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在游览器上的key,及sessionid="随机字符串"(默认) SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认) SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认) SESSION_COOKIE_SECURE = False # 是否https传输cookie(默认) SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认) SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期2周(默认) SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭游览器使得Session过期(默认) SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后保存(默认)

浙公网安备 33010602011771号