十九、Django3.0学习之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

时间: 2024-10-29 17:07:21

十九、Django3.0学习之auth模块之session,cookie的相关文章

十四、Django3.0学习之django.utils.encoding未发现 python_2_unicode_compatible包

python3+Django3 请使用 from six import python_2_unicode_compatible 替代 from django.utils.encoding import python_2_unicode_compatible 原文地址:https://www.cnblogs.com/chushujin/p/12539753.html

第二百七十九节,MySQL数据库-pymysql模块

MySQL数据库-pymysql模块 pymysql模块是python操作数据库的一个模块 connect()创建数据库链接,参数是连接数据库需要的连接参数使用方式: 模块名称.connect() 参数: host=数据库ip port=数据库端口 user=数据库用户名 passwd=数据库密码 db=数据库名称 cursor()创建数据库操作游标,无参使用方式: 游标变量.cursor() execute()操作数据库,参数1 sql语句,参数2 字符串占位符变量使用方式: 游标变量.exe

二十三、Django3.0学习之在apps下命令新建app应用

两种方法: 一..在apps下新建sales 1.1 首先手动在apps下新建文件夹sales 1.2 执行如下命令 django-admin startapp sales apps/sales 二.在工程目录下执行命令 2.1 在工程目录下执行命令 python3 manage.py startapp sales 2.2 将新增的sales剪切或者拖至apps下即可,文件可自动关联改变 原文地址:https://www.cnblogs.com/chushujin/p/12580323.html

angular学习笔记(十九)

本篇主要介绍angular使用指令修改DOM: 使用angular指令可以自己扩展html语法,还可以做很多自定义的事情.在后面会专门讲解这一块的知识,这一篇只是起到了解入门的作用. 与控制器,过滤器,服务,一样,可以通过模块实例的directive的方法来创建指令: var someModule = angular.module('SomeModule',[]); someModule.directive('directiveName',function(){ return { link: f

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来

Android学习路线(十九)支持不同设备——支持不同(Android)平台版本

当最新的Android版本为你的应用提供着很棒的APIs时,你却要在更多的设备更新之前继续支持老的系统版本.这篇课程如何在继续支持低版本的系统的情况下使用新版本的高级API. Platform Versions 仪表板展示了最新的活跃设备上运行的Android系统版本的分布,基于设备访问Google Play商店的次数.通常情况下,支持90%的活跃设备同时使用最新版本作为target是一个好习惯. 贴士: 为了在不同的Android版本上提供最好的特性和功能,你应该在你的应用中使用Android

winform学习日志(二十九)----------根据标点符号分行,StringBuilder的使用;将字符串的每个字符颠倒输出,Reverse的使用

一:根据标点符号分行,上图,代码很简单 二:代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Lines { public partial class Fr

unity3d学习笔记(十九)--ngui制作3d人物头顶的头像和血条

原地址:http://blog.csdn.net/lzhq1982/article/details/18793479 本系列文章由Aimar_Johnny编写,欢迎转载,转载请标明出处,谢谢. http://blog.csdn.net/lzhq1982/article/details/18793479 先上张图,自己做的一个demo. 这里的人物头像和血条是在3d世界生成的,所以有真正的纵深感和遮挡关系,废话不多说,看我是怎么实现的. 第一步,先在UI Root里制作头像和血条. 这个制作步骤基