zoukankan      html  css  js  c++  java
  • 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,那么会话永不过期。
  • 相关阅读:
    深入解析 float
    解决 css 浮动后 父元素高度失效问题
    高性能 Socket 组件 HP-Socket v3.2.1-RC1 公布
    基于lucene.net 和ICTCLAS2014的站内搜索的实现1
    史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发
    【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
    栈模拟队列 队列模拟栈
    状态机的两种写法
    Hadoop-2.2.0中文文档—— MapReduce 下一代--容量调度器
    OpenGLES 与 WebGL 中顶点属性的组织格式的误解
  • 原文地址:https://www.cnblogs.com/chushujin/p/12547481.html
Copyright © 2011-2022 走看看