第二版主要是连通了数据库。
但是感觉写的很冗余,还是得改改。
#user表:
create table users(
user_id int not null auto_increment COMMENT '用户id',
user_name varchar(100) not null COMMENT '用户名',
user_password varchar(100) not null COMMENT '用户密码',
is_black varchar(1) default null COMMENT '是否被拉黑 (0=否 1=是)',
createtime datetime default CURRENT_TIMESTAMP COMMENT '注册时间',
PRIMARY KEY (user_id)
);
import pymysql
# 查询用户是否已存在
def user_exist(input_name):
# 连接数据库
db = pymysql.connect(host="localhost", user="root", password="xxx", database="yu_daydayup")
# 获取游标对象
cursor = db.cursor()
# 执行sql
select_sql = "select user_name,user_password from users where user_name=%s"
cursor.execute(select_sql, (str(input_name),))
# 查询出数据,则data有值
data = cursor.fetchall()
cursor.close()
db.close()
# data返回元组((user_name,user_password),)
return data
# 数据库写入用户
def adduser(input_name, pwd):
# 连接数据库
db = pymysql.connect(host="localhost", user="root", password="xxx", database="yu_daydayup")
# 获取游标对象
cursor = db.cursor()
# 执行sql => is_black=0表示不在黑名单,=1表示在黑名单
insert_sql = "insert into users(user_name,user_password,is_black) values(%s,%s,'0')"
cursor.execute(insert_sql, (input_name, pwd))
# 提交数据,关闭游标,关闭数据库
db.commit()
cursor.close()
db.close()
# 数据库查询黑名单
def black_exist(input_name):
# 连接数据库
db = pymysql.connect(host="localhost", user="root", password="xxx", database="yu_daydayup")
# 获取游标对象
cursor = db.cursor()
# 执行sql
select_sql = "select user_name from users where user_name=%s and is_black='1'"
cursor.execute(select_sql, (str(input_name),))
data = cursor.fetchall()
cursor.close()
db.close()
return data
# 写入黑名单
def add_is_black(input_name):
# 连接数据库
db = pymysql.connect(host="localhost", user="root", password="xxx", database="yu_daydayup")
# 获取游标对象
cursor = db.cursor()
# 执行sql
update_sql = "update users set is_black='1' where user_name=%s"
cursor.execute(update_sql, (str(input_name),))
# 提交数据,关闭游标,关闭数据库
cursor.close()
db.commit()
db.close()
# 注册
def register():
# 定义一个变量,控制外循环
site = True
while site:
# 用户输入用户名
input_name = input("请输入用户名:")
# data=user_exist(input_name) 返回数据则data 为True
# 用户名存在
if user_exist(input_name):
# 用户名存在,则需再次进入循环=>再次输入用户名
print("此用户已经存在,请重新输入!")
# 用户名不存在
else:
# 循环输入密码,直到输入正确,退出循环
while True:
# 输入密码
pwd = input("请输入密码:")
# 检测密码长度不能低于3
if len(pwd) > 3:
# 密码长度大于3,则需要再次输入密码
repwd = input("请再次输入密码:")
# 检测确认密码与密码是否一致
if pwd == repwd:
# 用户名、密码正确,就可以插入库的中。
adduser(input_name, pwd)
print("注册成功,用户名{}。".format(input_name))
# 结束循环
# 结束外循环
site = False
# 结束内循环
break
else:
print("两次密码输入不一致。")
else:
print("输入的密码长度应该大于3,请重新输入!")
# 登录
def login():
# 输入密码错误次数最多3次
num = 3
site = True
while site:
input_name = input("请输入需要登录的用户名:")
user_message = user_exist(input_name)
if user_message:
# 用户存在,则校验用户是否在黑名单
if black_exist(input_name):
# 在黑名单,则需要重新输入用户名
print("该用户已列入黑名单,不允许登录平台!")
else:
while True:
# 不在黑名单,则输入密码
pwd = input("请输入密码:")
# 判断输入的密码与数据库里的密码比较
# user_message=((user_name,user_password),)
if user_message[0][1] == pwd:
print("登录成功")
site = False
break
else:
# 密码不正确,则减少一次输入密码的次数
num -= 1
# 次数小于0次,则不允许输入。
if num == 0:
print("3次机会已使用完,该用户将被锁定!")
# 密码输入三次失败后,需要把该用户加入黑名单
add_is_black(input_name)
site = False
break
else:
print("密码不正确,请重新输入密码,你还有%d次机会输入密码" % (num))
else:
print("用户不存在,请重新输入!")
if __name__ == '__main__':
while True:
vars = "登录1,注册2,退出(任意内容):"
print(vars)
num = input('请输入对应的对号:')
if num == '1':
login()
elif num == '2':
register()
else:
print("欢迎下次再来...")
break