Python实现简易登录系统:用户创建、登录与黑名单机制详解
本文介绍使用Python实现的简易登录系统,涵盖用户创建、登录验证及错误密码锁定机制。通过文件读写操作管理用户列表与黑名单,实现输入错误三次后锁定用户的功能。代码包含主循环、用户创建与登录函数,适合Python初学者理解基础逻辑与文件交互。
作为初学者,尽管这是一个相对基础的项目,但我在此过程中花费了相当长的时间进行调试和完善。
该系统存在若干不足之处,例如用户锁定机制尚不完善:当同一用户在连续三次输入错误密码后被锁定,但若在第二或第三次尝试时切换至其他用户再重新输入原用户信息,错误计数将重置,导致锁定逻辑失效。
此外,系统目前未对不存在的用户进行错误次数累积锁定,这可能导致潜在的安全漏洞。虽然可以通过创建被锁定用户来规避,但当前实现仅检测用户名是否存在,未进一步处理此类边界情况。
针对上述问题,我暂时设想了一种解决方案:在专用文件中增加独立的计数变量,并废弃现有的blocklist文件。然而,由于尚不清楚具体如何实现该操作,此部分功能暂时保留,待后续完善。
尽管Python语言不像C语言那样强制要求main函数作为程序入口,但为了增强代码的可读性和结构清晰度,我仍定义了一个main函数作为逻辑起点。
'''登陆系统
要求:
1、可以选择创建新的用户
2、可以登陆原有的用户
3、输入密码错误三次后用户则被锁定'''
flag=True #循环控制符
def createuser():
f=open('userlist.txt','r')#打开已存在用户的文件,假设文件已经存在
flag=True
name=f.readlines()
f.close()
while flag:
username=input('username:')
flag2=False#用户名已存在的标记符
for line in name:
if(username==line.split('*')[0]):
flag2=True
print("用户名已存在,请重新输入")
if flag2!=True:
f=open('userlist.txt','a')#创建新的用户
f.write('\n'+username)
f.write('*')
password=input('password:')
f.write(password)
f.close()
break
main()
def login():#登入函数,输入密码错误三次则锁定用户
count=0#密码错误计数,3次则锁定
f=open('userlist.txt','r')
info=f.readlines()
f.close()
user=None#重复用户标记符
while flag:
flag2=False
f2=open('blocklist.txt', 'r')
block_name=f2.readlines()
f2.close()
username=input('username:')
if user==None:#user没有使用过,则直接赋予输入的用户名
user=username
elif user!=username:#如果下一次输入的用户名不一样,则记录上一次的用户名,同时计数清零
user=username
count=0;
for line in block_name:#检查用户名是否被锁定,锁定则返回主菜单
if username==line.strip('\n'):
print('该用户已经被锁定,请联系管理员')
main()
password=input('password:')
for line in info:
if(username==line.split('*')[0]and password==line.split('*')[1].strip('\n')):
print('登入成功!')
flag2=True
if flag2==False:
count+=1
print("用户名或密码错误,请重新输入")
if count==3:#错误三次,把用户名添加到锁定列表中
print('密码错误次数过多,该用户已被锁定')
f3=open('blocklist.txt','a')
f3.write('\n'+username)
f3.close()
count=0#加入黑名单后重置计数
main()#加入黑名单后退回主菜单
info='''
------请输入相关数字-----
1.创建新的用户
2.登陆已有用户
3.退出程序
'''
def main():
print(info)
while flag:
i=input()
if i=='1':
createuser()
break
elif i=='2':
login()
break
elif i=='3':
exit()
else:
print("请输入正确的数字.")
main()#程序入口
以上内容为本文的全部分享,希望能为各位的学习提供有益参考。同时也欢迎大家继续支持本站,获取更多技术资源。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













