登录的本质是将数据与数据库的内容进行比对
注册的本质是将用户的信息存储到数据库中
在数据库中存储的信息不应该是以明文形式存储的
创建数据库
CREATE DATABASE User #创建一个数据库名叫 User
CREATE USER 'for_user'@'localhost' IDENTIFIED BY '888'#创建一个用户for_user 是本地用户 密码是888
CREATE TABLE user (
username VARCHAR(50) NOT NULL,
passwd VARCHAR(20) NOT NULL
);
查看表结构
将权力授予给for_user
GRANT ALL PRIVILEGES ON user.* TO 'for_user'@'localhost'
将python连接到数据库:
import pymysql
#使用字典将链接数据库的参数进行封装
contodb = dict({
"host": '127.0.0.1',
"user": 'for_user',
"password": '888',
"port": 3306,
"database": 'user',
"charset": 'utf8'
})
con = pymysql.connect(**contodb)
exe = con.cursor()
创建一个函数用于hash:
def hashbymd5(res):
res=hashlib.md5(res.encode("utf-8"))
res.update('salt'.encode("utf-8"))
return res.hexdigest()
#将传入的值进行哈希 返回哈希后的结果
判断用户是否重复
def isnotrepeat(username):
exe.execute(f"select username from user where username = '{username}'; ")
res=exe.fetchone()
#在数据库中查询是否有名为”username“的用户 如果有res将非空
if not res:#res为空时 返回true
return True
else:
return False
然后进行用户的注册操作:
def signin():
userne=input("用户名请输入")
password=input("密码请输入")
if isnotrepeat(userne):#判断是否为空
exe.execute(f"insert into user (username,passwd) values ('{userne}','{hashbymd5(password)}');")
#插入数据
con.commit()#提交
print("注册成功")
else:
print("重复的用户名")
用户的登录:
def login():
username=input("用户名请输入")
password=input("密码请输入")
exe.execute(f"select passwd from user where username = '{username}';")
#查询对应用户名的密码
res=exe.fetchone()
#将结果抓取 如果存在该用户 密码不为空 进行密码的判断
if res:
if res[0]==hashbymd5(password):
print(f"欢迎回来{username}")
else:
print("密码错误")
else:
print("用户密码为空")
注册:
登录:
退出