Django测试开发-19-auth模块之session,cookie
一、添加登录页面,登录成功页面
1.1 login_auth.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>login_auth登录页面</title> </head> <body> <div style="margin: 20% 40%;"> <h1>欢迎来到登录页面</h1> <form action="" method="post"> {% csrf_token %} <p> <label for="id_username">用户名:</label> <input type="text" id="id_username" name="username" placeholder="用户名" autofocus required/> </p> <p> <label for="id_password">密 码:</label> <input type="password" id="id_password" placeholder="密码" required/> </p> <p style="color: red"> {{ msg }} </p> <input type="submit" value="确定"> <a href="/vote/auth_forget">忘记密码?</a> </form> <br><br> <a href="/vote/register">新用户注册</a> </div> </body> </html>
1.2 login_success_auth.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>修改密码页面</title> </head> <body> <div style="margin: 15% 40%"> <h1>登录成功!</h1><br><br> <h2> <a href="/xadmin">进主页更多功能</a> </h2> <a href="/vote/loginout_auth"> <i class="show-sm fa fa-sign-out"></i> <span class="hide-sm">注销</span> </a> <form action="/vote/login_success_auth/" method="post"> {% csrf_token %} <p> <label for="id_pwd">原密码:</label> <input type="text" id="id_pwd" name="pwd" placeholder="原密码" autofocus required> </p> <p> <label for="id_new">新密码:</label> <input type="password" id="id_new" placeholder="新密码" name="new_pwd" required> </p> <p> <label for="id_re">确认新密码:</label> <input type="password" id="id_re" placeholder="重复新密码" name="re_pwd" required> </p> <input type="submit" value="确定"> <p style="color: red"> {{ msg }} </p> <a href="/vote/login_auth">登录</a> <br><br> </form> </div> </body> </html>
1.3 添加路由urls.py
url(r"^login_auth/$",views.loginView), url(r"^loginout_auth/",views.loginoutView), url(r"^login_success_auth/$",views.loginSuccessView),
1.4 添加视图views.py
loginView-登录
def loginView(request): '''auth登录视图''' if request.method == "POST": username = request.POST.get('username','') pwd = request.POST.get('password','') print("pwd=%s" % pwd) user = User.objects.filter(username = username).first() if user is None: return render(request,"login_auth.html",{'msg':"用户未注册!请注册"}) if user is not None: # 判断用户是否可用,如果返回False则不可用 # login(request,user=user) # 设置session request.session['user'] = username # 读取session print(request.session.get('user',"我是默认值")) # print(request.session['user']) # 登录成功,跳转到成功界面,由loginSuccessView函数处理 response = HttpResponseRedirect('/vote/login_success_auth') # 设置cookie,参数cookie名称,cookie值,cookie过期时间,秒 response.set_cookie("cookie_name",username,3600) print("response = %s" % response) # print(response.get("cookie_name")) return response else: # 登录失败提示信息 return render(request,"login_auth.html",{'msg':"账号或密码错误!"}) else: # 请求方式不是POST时页面不跳转 return render(request,"login_auth.html",{"msg":""})
loginSuccessView-登录成功
def loginSuccessView(request): '''登录成功页面''' # 获取cookie cookie_value = request.COOKIES.get("cookie_name","") print("cookie_value = %s" % cookie_value) #跳转到登录成功界面 return render(request,"login_success_auth.html",{'msg':''})
loginoutView-退出
def loginoutView(request): '''退出登录''' # 调用系统退出登录方法,会将存储在用户session的数据全部清空 logout(request) return HttpResponse("您已退出!")
二、session简介
2.1 session
Django默认支持Session,其内部提供了5种类型的Session供开发者使用:数据库(默认)、缓存、文件、缓存+数据库、加密cookie。
默认是将Session数据存储在数据库中django_session表中
2.2 常用的操作
通过HttpRequest对象(视图函数里面的request参数)的session属性进行会话的新增key,查询,和清除session
2.2.1 新增session键值对
request.session["key"]="value"
2.2.2 根据key值获取value值
request.session.get('key', "默认值") request.session["key"]
2.2.3 删除session
#删除session request.session.clear() #删除session中的指定键及值,在存储中只删除某个键及对应的值 del request.session['key'] #清除session数据,在存储中删除session的整条数据。 request.session.flush()
2.2.4 django默认是2个星期过期
#设置session过期时间 request.session.set_expiry(value) #如果value是一个整数,会话将在value秒没有活动后过期。 #如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期。 #如果value为None,那么会话永不过期。
当有些人一出生就有的东西,我们要为之奋斗几十年才拥有。但有一样东西,你一辈子都不会有,那就是我们曾经一无所有。