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,默认修改之后保存(默认)