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,那么会话永不过期。
原文地址:https://www.cnblogs.com/chushujin/p/12547481.html