您的位置:首页 > 编程语言 > Python开发

python实战系列之模拟用户密码登陆系统(一)

2015-12-08 17:13 716 查看
1. 前言
最近一直在研究学习python,基于python写一个模拟用户登陆验证的程序,大牛勿喷,欢迎各位同仁指导,学习!该程序使用函数式编程方式,将各个功能模块用函数实现,具体函数说明如下:get_username()从键盘中获取用户的输入,check_user_lock()检查用户名是否被锁定,get_password()从键盘获取密码的输入,check_user_password()检查用户名和密码是否正确,lock_user()用户名和密码输错三次则锁定用户,main()执行函数功能调用和功能检测。

2. 程序内容
#!/usr/bin/python
#coding:utf-8
import sys
import getpass

def get_username():
'''
从键盘中获取用户的输入,并对输入做检测,允许Ctrl+C,Ctrl+D退出输入,输入不为空,则返回用户名
'''
try:
while True:
username = raw_input('\033[32mPlease input username:\033[0m')
if username.strip() == '':
continue
else:
break
except Exception as e:
print e
sys.exit(1)
except KeyboardInterrupt:
print ""
sys.exit(1)
return username

def get_password():
'''
从键盘中获取密码的输入,并检测
'''
try:
while True:
password = getpass.getpass('\033[32mPlease input password:\033[0m')
if password.strip() == '':
continue
else:
break
except Exception as e:
print e
sys.exit(1)
except KeyboardInterrupt:
print ""
sys.exit(1)
return password

def check_user_lock(username):
'''
检查用户名是否被锁定,将锁定的用户名存放在userlock.txt文件内,锁定则返回True
'''
lock_flag = False
try:
f = file('userlock.txt','r')
if username in [ user.strip() for user in f.readlines() ]:
lock_flag = True
f.close()
except Exception as e:
print e
sys.exit(1)
return lock_flag

def lock_user(username):
'''
执行用户锁定,写入锁定的文件内,输错密码的次数交由其他地方处理,此处只是执行用户锁定的操作
'''
try:
f = file('userlock.txt','a+')
if username not in [ user.strip() for user in f.readlines() ]:
f.write(username)
f.write("\n")
f.close()
except Exception as e:
print e
sys.exit(1)
def check_user_password(username,password):
'''
检测用户名和密码是否正确,用户名和密码存放在userinfo.txt内,用户名和密码以:号分割,如果匹配正确,则返回True
'''
allow_flag = False
try:
f = file('userinfo.txt','r')
for line in f.readlines():
user,passwd = line.strip().split(":")
if user == username and password == passwd:
allow_flag = True
f.close()
except Exception as e:
print e
sys.exit(1)
return allow_flag

def main():
'''
执行函数功能调用,依次调用get_username(),get_password函数,并调用check_user_password()函数检查用户名和密码是否输入正确,不正确,则有三次输入用户名or密码的机会
'''
retry_time = 0
retry_max_time = 3
while True:
username = get_username()
if check_user_lock(username) is True:
sys.exit('\033[31muser %s has been locked now\033[0m') % (username)
password = get_password()
if check_user_password(username,password) is not True:
retry_time = retry_time + 1
if retry_time < retry_max_time:
print "用户密码输入错误,请重新输入(还剩%d次):" % (retry_max_time - retry_time)
else:
print "超过三次,用户已经被锁定!"
lock_user(username)
sys.exit(-1)
else:
print "\033[33mCongratulation,you have login User System!\033[1m"
break

if __name__ == "__main__":
main()
说明:userinfo.txt文件内,用户密码以:user:password的方式书写,每行一个代表一个用户,userlock.txt则一个用户一行。
本文出自 “Happy实验室” 博客,请务必保留此出处http://happylab.blog.51cto.com/1730296/1720815
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: