flask 在网页表单写账号和密码 数据库校验,存在的话 弹欢迎页,不存在的话 添加到数据库,也弹欢迎页

发布时间 2023-08-09 18:12:12作者: 胖豆芽

 

 去掉了注册signup.html页,因为是最简单的一个工程,不验证账号的唯一性

/**创建flask数据库**/
CREATE DATABASE flask CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
/**创建用户表**/
CREATE TABLE `flask`.`user` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id' PRIMARY KEY,
  `name` VARCHAR(50) NOT NULL COMMENT '姓名',
  `psw` VARCHAR(20) NOT NULL COMMENT '密码'
);

/**插入数据**/
INSERT INTO `flask`.`user` (`id`, `user`, `psw`) VALUES ('1', 'dou1', '123');
INSERT INTO `flask`.`user` ( `user`, `psw`) VALUES ( 'dou2', '2');

/**查询表**/
select  * from `flask`.`user` where id>4;
/**删除表 **/
delete  from `flask`.`user` where id>4

 

#app.py
from flask import *
from mysql_con import Mysql
# 实例化
app=Flask(__name__)
# 定义路由
@ app.route('/')
def index():
    return render_template('login.html')

@ app.route('/login', methods=["post","GET"])
def login():
    if request.method == 'POST':
        # request.from.get()获得表单提交的数据
        user = request.form.get("user")
        print(user)
        psw = request.form.get("psw")
        print(psw)

        # 调数据库 将用户和密码传入,如果有返回结果  跳转到欢迎页 没有结果跳转到注册页面
        # 实例化mysql_con.py中的类Mysql
        mysql = Mysql()
        print('数据库里包含表单提交的吗',mysql.query_flask_login(user,psw))
        if mysql.query_flask_login(user,psw): # 数据库有的话,直接欢迎页
            return render_template('welcom.html')
        else:
            mysql.noQueryFlask(user,psw) # 数据库没有有的话,直接数据库添加一条数据,欢迎页
            return render_template('welcom.html')


    else:
        return render_template('404.html')


if __name__ == '__main__':

    app.run(debug=True)
# mysql_con.py
#引入相关的库
import pymysql


class Mysql:
    def __init__(self,
                 host= "localhost",
                 user= "root",
                 pwd= "111111",
                 db= "flask"):
        self.host=host
        self.user=user
        self.pwd=pwd
        self.db=db
    def getConnect(self):
        '''
        得到连接信息
        :return: conn.cursor()  连接的游标
        '''
        if not self.db:
            raise (NameError,"没有设置数据库信息") # 异常提醒
            # 连接操作:编码格式的指定,默认返回数据类型的指定
        self.conn = pymysql.connect(host=self.host,
                               user=self.user,
                               password=self.pwd,
                               database=self.db,
                               charset="utf8",
                               )
        # 创建游标
        cur = self.conn.cursor(pymysql.cursors.DictCursor)
        # 不加参数时 返回元祖套元祖格式
        # 传入pymysql.cursors.DictCursor参数  返回 列表中包含字典的格式
        if not cur:
            raise (NameError,"数据库连接失败")
        else:
            # print("数据库连接成功“)
            return cur
    def query(self,sql):
        '''
        执行查询语句
        返回 元祖
        :param sql_select:
        :return:
        '''
        cur=self.getConnect()
        cur.execute(sql) # 执行语句
        result = cur.fetchall() #获得结果 ((1, 'dou1', '123'),)
        # result = cur.description
        # 获得结果 (('id', 8, None, 20, 20, 0, False),
        # ('user', 253, None, 50, 50, 0, True),
        # ('psw', 253, None, 20, 20, 0, True))
        # 查询完毕关闭连接
        self.conn.close()
        return result
    def query_flask_login(self,user,psw):
        cur = self.getConnect()
        # isfind =True  有这个账号
        isfind=False
        # 如果发现了 返回真 否则返回假

        sql = f"select  * from user where user='{user}' and psw='{psw}'"
        cur.execute(sql)  # 执行语句
        result = cur.fetchall()  # 获得结果 ((1, 'dou1', '123'),)
        self.conn.close()
        if result==():
            return False
        else:
            print(result)
            return True
    def noQueryFlask(self,user,psw):
        cur = self.getConnect()
        sql=f"INSERT INTO `flask`.`user` ( `user`, `psw`) VALUES ( '{user}', '{psw}');"
        cur.execute(sql)  # 执行语句
        self.conn.commit()  # 修改需要提交
        # 查询完毕关闭连接
        self.conn.close()
    def noQuery(self,sql):
        '''
        执行非查询语句  增删改
        再调用查询方法
        返回 结果
        :param sql
        :return:
        '''
        cur=self.getConnect()
        cur.execute(sql) # 执行语句
        self.conn.commit()# 修改需要提交
        # 查询完毕关闭连接
        self.conn.close()
if __name__ == '__main__':
    mysql=Mysql()
    # 查询
    # res_flask_login=mysql.query_flask_login('dou', '123')
    # print(res_flask_login)
    # 添加
    res_flask_signup = mysql.noQueryFlask('dou4',4)
    # 查询
    res_qu=mysql.query("select  * from `flask`.`user`")
    print(res_qu)

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>

</head>
<body>

<div style="text-align: center">
    <h2>登录</h2>
    <form action="/login" method="post">
        <div><input placeholder="请输入用户名" type="text" name="user"></div>
        <div><input placeholder="请输入密码"type="password" name="psw"></div>
        <button type="submit" >登录</button>
    </form>

</div>


</body>
</html>

 填写内容后,点击登录,跳转到欢迎页

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
登录成功 欢迎进入主页
</body>
</html>