zoukankan      html  css  js  c++  java
  • Flask框架实现登录注册功能(mysql数据库)

    前言:

    本例使用Flask框架完成登录和注册操作,包括前端(index.html,regist.html)和后端(app.py)两部分,前端页面不过多介绍,直接进入后端部分:

    逻辑思路:

    登录部分:运行程序默认进入登录界面,输入账号和密码点击登录,系统进入”获取登录请求参数及处理“阶段(@app.route('/login')),验证账号密码正确后跳转到目标界面。

    注册部分:运行程序输入注册部分的路由进入注册界面,输入账号、密码和确认密码,系统进入”获取注册请求及处理“阶段(@app.route('/registuser')),判断两次输入密码是否一致,一致则跳转到登录界面,否则弹出警告框提示用户重新输入。

    主要步骤:

    ①导入需要的扩展包

    #导入数据库模块
    import pymysql
    
    from flask import Flask
    from flask import render_template
    
    #导入前台请求的request模块
    from flask import request
    import traceback
    #导入弹出警告框模块
    import win32api,win32con

    ②定义登录界面路由

    #默认登录页面
    @app.route('/')
    def login():
        return render_template('login.html')

    ③定义注册界面路由

    #访问注册页面
    @app.route('/regist')
    def regist():
        return render_template('regist.html')

    ④获取登录请求参数及处理

    @app.route('/login')
    def getLoginRequest():
        # 查询用户名及密码是否匹配及存在
        # 连接数据库,此前在数据库中创建数据库TESTDB
        db = pymysql.connect(host="localhost", user="root", password="417020", database="flask",charset="utf8")
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
        # SQL 查询语句
        sql = "select * from user where user=" + request.args.get('user') + " and password=" + request.args.get(
            'password') + ""
        try:
            # 执行sql语句
            cursor.execute(sql)
            results = cursor.fetchall()
            print(len(results))
            if len(results) == 1:
                return '登录成功'       #返回需要跳转的页面或需要显示的字符串
            else:
                return '用户名或密码不正确'
            # 提交到数据库执行
            db.commit()
        except:
            # 如果发生错误则回滚
            traceback.print_exc()
            db.rollback()
        # 关闭数据库连接
        db.close()

    ⑤获取注册请求及处理

    @app.route('/registuser')
    def getRigistRequest():
    #把用户名和密码注册到数据库中
    
        #连接数据库,此前在数据库中创建数据库flask
        db = pymysql.connect(host="localhost", user="root", password="417020", database="flask",charset="utf8")
        #使用cursor()方法获取操作游标
        cursor = db.cursor()
        #获取输入框内容
        username=request.args.get('user')
        password=request.args.get('password')
        password2=request.args.get('password2')
        print(password)
        print(password2)
        #判断两次输入密码是否一致,一致则跳转到登录界面,不一致则弹出警告,要求用户重新输入
        if password==password2:
            # SQL 插入语句
            sql = "INSERT INTO user(user, password) VALUES ("+username+", "+password+")"
            try:
                # 执行sql语句
                cursor.execute(sql)
                # 提交到数据库执行
                db.commit()
                 #注册成功之后跳转到登录页面
                return render_template('login.html')
            except:
                #抛出错误信息
                traceback.print_exc()
                # 如果发生错误则回滚
                db.rollback()
                return '注册失败'
            # 关闭数据库连接
            db.close()
        else:
            win32api.MessageBox(0,"两次输入密码不一致,请重新输入!","提醒",win32con.MB_ICONWARNING)
            return render_template('regist.html')

    完整代码:

    #导入数据库模块
    import pymysql
    
    from flask import Flask
    from flask import render_template
    
    #导入前台请求的request模块
    from flask import request
    import traceback
    #导入弹出警告框模块
    import win32api,win32con
    
    #创建Flask应用实例
    app = Flask(__name__)
    
    
    #默认登录页面
    @app.route('/')
    def login():
        return render_template('login.html')
    
    #访问注册页面
    @app.route('/regist')
    def regist():
        return render_template('regist.html')
    
    #获取注册请求及处理
    @app.route('/registuser')
    def getRigistRequest():
    #把用户名和密码注册到数据库中
    
        #连接数据库,此前在数据库中创建数据库flask
        db = pymysql.connect(host="localhost", user="root", password="417020", database="flask",charset="utf8")
        #使用cursor()方法获取操作游标
        cursor = db.cursor()
        #获取输入框内容
        username=request.args.get('user')
        password=request.args.get('password')
        password2=request.args.get('password2')
        print(password)
        print(password2)
        #判断两次输入密码是否一致,一致则跳转到登录界面,不一致则弹出警告,要求用户重新输入
        if password==password2:
            # SQL 插入语句
            sql = "INSERT INTO user(user, password) VALUES ("+username+", "+password+")"
            try:
                # 执行sql语句
                cursor.execute(sql)
                # 提交到数据库执行
                db.commit()
                 #注册成功之后跳转到登录页面
                return render_template('login.html')
            except:
                #抛出错误信息
                traceback.print_exc()
                # 如果发生错误则回滚
                db.rollback()
                return '注册失败'
            # 关闭数据库连接
            db.close()
        else:
            win32api.MessageBox(0,"两次输入密码不一致,请重新输入!","提醒",win32con.MB_ICONWARNING)
            return render_template('regist.html')
    
    # 获取登录参数及处理
    @app.route('/login')
    def getLoginRequest():
        # 查询用户名及密码是否匹配及存在
        # 连接数据库,此前在数据库中创建数据库TESTDB
        db = pymysql.connect(host="localhost", user="root", password="417020", database="flask",charset="utf8")
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
        # SQL 查询语句
        sql = "select * from user where user=" + request.args.get('user') + " and password=" + request.args.get(
            'password') + ""
        try:
            # 执行sql语句
            cursor.execute(sql)
            results = cursor.fetchall()
            print(len(results))
            if len(results) == 1:
                return '登录成功'       #返回需要跳转的页面或需要显示的字符串
            else:
                return '用户名或密码不正确'
            # 提交到数据库执行
            db.commit()
        except:
            # 如果发生错误则回滚
            traceback.print_exc()
            db.rollback()
        # 关闭数据库连接
        db.close()
    
    
    # 使用__name__ == '__main__'是 Python 的惯用法,确保直接执行此脚本时才
    # 启动服务器,若其他程序调用该脚本可能父级程序会启动不同的服务器
    if __name__ == '__main__':
        app.run(debug=True)
  • 相关阅读:
    Microsoft Enterprise Library 5.0 系列(二) Cryptography Application Block (初级)
    Microsoft Enterprise Library 5.0 系列(五) Data Access Application Block
    Microsoft Enterprise Library 5.0 系列(八) Unity Dependency Injection and Interception
    Microsoft Enterprise Library 5.0 系列(九) Policy Injection Application Block
    Microsoft Enterprise Library 5.0 系列(三) Validation Application Block (高级)
    软件研发打油诗祝大家节日快乐
    从挖井的故事中想到开发管理中最容易忽视的几个简单道理
    ITIL管理思想的执行工具发布
    管理类软件设计“渔”之演化
    20070926日下午工作流与ITILQQ群 事件管理 讨论聊天记录
  • 原文地址:https://www.cnblogs.com/zyj3955/p/15504433.html
Copyright © 2011-2022 走看看