这篇是接上一篇内容,上篇实现了如何将明文的密码加密写入数据库中,我们今天这段代码就是实现如何让用户输入用户名和密码,然后跟数据库中的信息进行比较,如果匹配就显示登陆成功,如果密码错误将提示用户继续输入,用户可输入三次密码尝试,如果都输入错误就直接退出,如果有一次正确就表示登陆成功,接下来我们来看脚本实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/usr/bin/env python import sys import hashlib import getpass import sqlite3 def main(): user_name = raw_input('Please Enter User Name: ') conn = sqlite3.connect('pub.db') cu = conn.cursor() sql = ''' select name,pass from user where name = ? ''' cu.execute(sql, (user_name,)) uname,pw = cu.fetchone() pass_try = 0 x = 3 while pass_try < x: user_pass = hashlib.sha224(getpass.getpass('Please Enter Password: ')).hexdigest() if user_pass != pw: print 'Incorrect Password,\n' pass_try += 1 else: print 'User is logged in!\n' sys.exit() if __name__ == "__main__": main() |
脚本解释,根据用户输入的用户名,从数据库中查询用户名和密码,此处写的教简单,正常应先判断是否有这个用户名,如果没有就直接返回错误,有兴趣的兄弟自己加代码测试吧,从数据库中获取数据用的游标对象,fetchone()函数将获取数据库中用户信息,返回的是元组,赋值给变量user,pw,然后定义了可以允许用户尝试几次密码,这里定义的是3次,接下来是个while循环,判断条件是如果密码输入的次数少于允许输入的次数,就一直让用户输入,输入三次后仍不正确就退出程序,如果有一次正确,就显示用户登录,然后退出,脚本完毕。