阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

flask框架如何实现修改密码和免密登录功能

318次阅读
没有评论

共计 5994 个字符,预计需要花费 15 分钟才能阅读完成。

导读 flask 是 python web 开发的常用框架之一。本文将讲述 flask 如何实现修改密码和免密登录功能
修改密码功能
数据库部分:
# 重置密码
def reset_pass(phone,password):
    conn,cursor=get_conn()
    sql="update userdata set userpass='"+password+"'where userphone='"+phone+"'"
    try:
        print("正在修改密码...")
        resetflag=cursor.execute(sql)
        conn.commit()
        close_conn(conn,cursor)
        if(resetflag==1):
            print("修改成功")
            return 1
        else:
            print("修改失败!")
            return 0
    except:
        print("系统错误... 修改密码失败!")
        return 0
路由部分:
# 用户修改密码
@app.route('/resetpass',methods=['GET', 'POST'])
def resetpass():
    userphone=request.values.get('userphone')
    resetpass=request.values.get('resetpass')
    print("路由获得手机号:"+userphone+"\n")
    print("路由获得新密码:" + resetpass + "\n")
    flag=sql.reset_pass(userphone,resetpass)
    if(flag==1):
        return jsonify({"data":1})
    else:
        return jsonify({"data":0})
html 页面:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> 树懒电影 --- 重置您的密码 </title>
    <style type="text/css">
        #resetform{
            margin-top: 350px;
            margin-left: 750px;
        }
    </style>
</head>
<body>
    <form method="post" id="resetform">
        <tr>
            <td><input type="text" id="userphone" value=""placeholder=" 输入您的手机号码 "></td>
        </tr><br>
        <tr>
            <td><input type="password" id="resetpass1" value=""placeholder=" 输入您的新密码 "></td>
        </tr><br>
        <tr>
            <td><input type="password" id="resetpass2" value=""placeholder=" 再次输入您的新密码 "></td>
        </tr><br>
        <tr>
            <td><input type="reset" value="清空"></td>
            <td><input type="button" id="resetbtn" onclick="resetpass()" value="提交"></td>
        </tr>
    </form>
</body>
</html>
<script src="https://www.linuxprobe.com/static/js/jquery.min.js"></script>
<script type="text/javascript">
    function resetpass(){var userphone=document.getElementById("userphone").value
        var resetpass1=document.getElementById("resetpass1").value
        var resetpass2=document.getElementById("resetpass2").value
        var submit_flag=1
        // 判空
        if((userphone.length==0)||(resetpass1.length==0)||(resetpass2.length==0)){
            submit_flag=0
            alert("请把信息填写完整!")
        }
        // 判断密码一致性
        if(resetpass2!=resetpass1){
            submit_flag=0
            alert("两次填写的密码不一致")
            document.getElementById("resetpass1").focus();}
        // 判断手机号
        if(userphone.length!=11){
            submit_flag=0
            alert("手机号码应为 11 位!")
            document.getElementById("userphone").focus();}
        var regu =  /^1[3456789]\d{9}$/
        if(!(regu.test(userphone)) ){
            submit_flag=0
            alert("手机号码格式有误!")
            document.getElementById("userphone").focus();}
        // 判断密码格式
        if(!((resetpass1.length>=6)&&resetpass1.length<=18))
        {
            submit_flag=0
            alert("密码长度应该为 6 -16 位!")
            document.getElementById("resetpass1").focus();}
            var regex = new RegExp('(?=.*[0-9])(?=.*[a-zA-Z]).{6,18}');
            part_pass=resetpass1.split(" ")
        if((!(regex.test(resetpass1))) || part_pass.length!=1)
        {
            submit_flag=0
            alert("密码为数字 + 英文字母 且不可以包含空格!")
            document.getElementById("resetpass1").focus();}

        // 发起请求
            if(submit_flag==1)
        {
            $.ajax({
                url:"/resetpass",
                data:{userphone:userphone,resetpass:resetpass2},
                success: function (data) {if (data.data==1)
                    {alert("密码修改成功!")
                        window.open("/",'_self')
                    }
                    else
                    {alert("修改密码失败!请重试")
                    }
                },
                error: function (xhr, type, errorThrown) {// print("ajax 请求失败!")
                }
            })
        }
        // alert(submit_flag)
    }
</script>
免密登录
html 代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="https://www.linuxprobe.com/static/css/login.css" rel="external nofollow" >
    <script src="https://www.linuxprobe.com/static/js/jquery-1.7.2.min.js"></script>
    <script src="https://www.linuxprobe.com/static/js/register.js"></script>
    <title> 树懒电影登录 </title>
    <script >
    </script>
</head>
<body>
    <div id="container">
        <div id="container-child">
            <div id="img-div"><img src="https://www.linuxprobe.com/static/img/shulan.png"></div>
            <div id="login-div">
                <div>
                    <p class="p-title"> 登录您的树懒电影 </p>
                    <form id="login-form" method="post">
                        <div class="input-d">
                            <input class="input-text" type="text" name="userphone" id="userphone" placeholder="请输入您的账号">
                        </div>
                        <div class="input-d">
                            <input class="input-text" type="password" name="password" id="password" placeholder="请输入您的密码">
                        </div>
                        <div class="div-input">
                            <div>
                                <input type="checkbox" value=“1”class=“remeber”onclick="onClickHander(this)">
                                <label> 记住密码 </label>
                            </div>
                        </div>
                        <button type="button" class="login-button" onclick="login_()"> 登 录 </button>
                        <div class="footer"> <a href="http://127.0.0.1:5000/regis" rel="external nofollow" > 注册 </a> | <a href="http://127.0.0.1:5000/reset" rel="external nofollow" > 忘记密码 </a></div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</body>
</html>
<script>
    var cb=0
    function onClickHander(obj) {if(obj.checked==true){
            cb=1
            // alert(cb)
        }else{
            cb=0
            // alert(cb)
        }
    }
    function login_(){var userphone=document.getElementById("userphone").value
        var password=document.getElementById("password").value
        // alert(cb)
        $.ajax({
                url: "/web_login",
                data: {userphone:userphone,password:password,cb:cb},
                success: function (data) {
                    // 正常验证失败弹窗
                    if (data.data == 0)
                        alert("账号或密码错误!")
                    // 验证成功,返回 response
                    if (data.data != 0)
                        window.open("http://127.0.0.1:5000/show","_self")
                },
                error: function (xhr, type, errorThrown) {print("登录 js,验证账号密码 ajax 请求失败!")
                }
        })
    }
</script>
Python 路由
# 免密登录
@app.route('/web_login/',methods=['GET', 'POST'])
def web_login():
    userphone = request.values.get('userphone')
    password=request.values.get('password')
    cb=request.values.get('cb')
    print("是否记住密码:"+cb)            #cb 的返回值类型是 str 字符串
    # print(type(cb))
    print("登录账号:"+userphone+""+" 密码:"+password)
    res=sql.web_login(userphone,password)
    if(res==True):
        session['userphone'] = userphone
        if(cb=="1"):
            print("开始存储 cookie 登录账号:" + userphone + "" +" 密码:" + password)
            resp = make_response('储存 cookie')
            resp.set_cookie('cookphone', userphone, max_age=3600 * 24 * 15)
            resp.set_cookie('cookpass', password, max_age=3600 * 24 * 15)
            print("登录成功且用户选择记住密码,返回 response")
            return resp                   #登录成功且用户选择记住密码,返回 response
        else:
            print("登录成功 返回 1 状态码")
            return jsonify({"data": 1})  # 登录成功 返回 1 状态码
    else:
        print("登录失败   返回 0 状态码")
        return jsonify({"data":0})  #登录失败   返回 0 状态码 
数据库验证登录
# 用户(web)登录验证
def web_login(userphone, password):
    cursor = None
    conn = None
    res=[]
    if(userphone==None or password==None):
        return False
    conn, cursor = get_conn()
    sql = "select userphone,userpass from userdata where'"+userphone+"'=userphone and'"+password+"'=userpass"
    res=query(sql)
    conn.commit()
    if(len(res)==0):
        print("登陆失败(WEB)")
        close_conn(conn, cursor)
        return False
    else:
        close_conn(conn, cursor)
        print("登陆成功(WEB)")
        return True

以上就是 flask 框架实现修改密码和免密登录功能的详细内容

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计5994字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19352
评论数
4
阅读量
8087944
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
免费领取huggingface的2核16G云服务器,超简单教程

免费领取huggingface的2核16G云服务器,超简单教程

免费领取 huggingface 的 2 核 16G 云服务器,超简单教程 前言 HuggingFace.co...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你

你的云服务器到底有多强?宝塔跑分告诉你 为什么要用宝塔跑分? 宝塔跑分其实就是对 CPU、内存、磁盘、IO 做...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新SSL证书系统、申请godaddy的APIKEY

升级自动部署更新 SSL 证书系统、申请 godaddy 的 APIKEY 公司之前花钱购买的 ssl 证书快...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛NAS-1:安装飞牛NAS

星哥带你玩飞牛 NAS-1:安装飞牛 NAS 前言 在家庭和小型工作室场景中,NAS(Network Atta...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集

Prometheus:监控系统的部署与指标收集 在云原生体系中,Prometheus 已成为最主流的监控与报警...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...