【Python之旅】第一篇:基于文件处理的登陆接口

1.基本需求

    编写登陆接口,实现如下需求:

(1)输入用户名密码

(2)认证成功后显示欢迎信息

(3)输错三次后锁定




2.实现细节


·每添加一个用户,需要手动添加三个文件

文件功能
username_count.txt记录用户输错密码的次数,最大为3次,如果用户密码输入正确,则重置为0,默认为0
username_lock.txt记录用户是否被锁定,1表示锁定,0表示未锁定,默认为0
username_passwd.txt记录用户的密码

·注:username是指该用户的用户名,视具体的用户名而定;


·每添加一个用户,在username.txt中写入该用户名,一个用户名占一行(手动);

·如果输入的用户名或密码为空,都要求重新输入;

·输入不存在的用户名,只会提示“username or password wrong”;

·输入存在的用户名,才会进行密码输入错误次数的记录。




3.实现代码与注释

import sys,os

count = 0  #To count, if the user is locked.
mark_user = 0   #To make sure if the user is existing.
mark_passwd = 0 #To make sure if the password is right.

while count < 3:
  name = raw_input('Username:').strip()
  if len(name) == 0:
    print 'The username can not be empty!'
    continue
  
  key = raw_input('Password:').strip() 
  if len(key) == 0:
    print 'The password can not be empty!Try again!'
    continue

#Upon:To check if the username or password is empty.检查用户名或密码是否为空
  
  f = file('username.txt', 'r')
  userlist = f.readlines()
  f.close()
  for user in userlist:
    if user.strip() == name:
      mark_user = 1

#检查输入的用户是否在username.txt文件中,即是否注册,如果在,mark_user = 1
  
  if mark_user == 1:  
    f = file('%s_lock.txt' % (name), 'r')
    locked = int(f.readline().strip())
    f.close()  
  else:
    print 'Username or password wrong!'  
    break
#Upon:To check if exist,if not exist,printing username or password wrong!And quit the program.
#用户名不存在就提示用户名或密码错误,用户名存在就检查该用户是否被锁定

  if locked == 1:
    
    sys.exit('Sorry, the username had been locked!!!Please call the system administrator.')

#Upon:To check if the username is locked by the system.

  else:
    f = file('%s_passwd.txt' % (name), 'r')
    passwd = (f.readline().strip())
    if passwd.strip() == key:
        mark_passwd = 1
    # check the password from the name_input password file.

    if mark_user == 1 and mark_passwd == 1:
      f = file('%s_count.txt' % name, 'w')
      f.write('0')
      f.close()
      sys.exit('%s, welcome to our system!' % name)

#用户名和密码正确,将username_count.txt内容重置为0 
     
    else:
      f = file('%s_count.txt' % name, 'r')
      count = int((f.read().strip()))
      f.close()
      count += 1
      f = file('%s_count.txt' % name, 'w')
      f.write(str(count))
      f.close()

#open the count file of the user and change it.
#密码不正确,就把count次数记录在该用户名对应的文件count文件上
      
      print '''Username or password wrong!
And the username '%s' has %d more chances to retry!''' % (name, 3 - count)
      if count == 3:
        print "'%s' has been locked!!!" % (name)
        if os.path.exists('%s_lock.txt' % (name)):
          fobj = open('%s_lock.txt' % (name), 'w')
          fobj.writelines('1\n')
        else:
          print 'Username or password wrong!'
      continue

#Upon:To check if the username and password are right, if not, the count will add 1.
#如果count次数为3,则将用户对应的lock文件内容重置为1,锁定该用户




4.测试


--对单一用户xpleaf的测试


·在对应4个文件中添加相应信息:

xpleaf@xpleaf-machine:~/seminar6/day1$ head username.txt xpleaf_count.txt xpleaf_lock.txt xpleaf_passwd.txt 
==> username.txt <==
xpleaf

==> xpleaf_count.txt <==
0
==> xpleaf_lock.txt <==
0

==> xpleaf_passwd.txt <==
xpleaf123


·正常输入用户名和密码:

xpleaf@xpleaf-machine:~/seminar6/day1$ python newlogin.py 
Username:xpleaf
Password:xpleaf123
xpleaf, welcome to our system!


·故意输错两次密码后查看相关文件:

xpleaf@xpleaf-machine:~/seminar6/day1$ python newlogin.py 
Username:xpleaf
Password:klkdf
Username or password wrong!
And the username 'xpleaf' has 2 more chances to retry!
Username:xpleaf
Password:kldf
Username or password wrong!
And the username 'xpleaf' has 1 more chances to retry!
Username:Traceback (most recent call last):
  File "newlogin.py", line 8, in <module>
    name = raw_input('Username:').strip()
EOFError
xpleaf@xpleaf-machine:~/seminar6/day1$ cat xpleaf_count.txt 
2

·可以看到count文件已经记录为2,再输入正确的用户名和密码:

xpleaf@xpleaf-machine:~/seminar6/day1$ python newlogin.py 
Username:xpleaf
Password:xpleaf123
xpleaf, welcome to our system!
xpleaf@xpleaf-machine:~/seminar6/day1$ cat xpleaf_count.txt 
0

·count文件重置为0;


·连续输入密码错误超过3次:

0xpleaf@xpleaf-machine:~/seminar6/day1$ python newlogin.py 
Username:xpleaf
Password:kldf
Username or password wrong!
And the username 'xpleaf' has 2 more chances to retry!
Username:xpleaf
Password:klkdf
Username or password wrong!
And the username 'xpleaf' has 1 more chances to retry!
Username:xpleaf
Password:kldf
Username or password wrong!
And the username 'xpleaf' has 0 more chances to retry!
'xpleaf' has been locked!!!
xpleaf@xpleaf-machine:~/seminar6/day1$ python newlogin.py 
Username:xpleaf
Password:xpleaf123
Sorry, the username had been locked!!!Please call the system administrator.
xpleaf@xpleaf-machine:~/seminar6/day1$ cat xpleaf_lock.txt 
1

·用户已经被锁定,对应lock文件内容变为1,如果需要解锁,则要手动将该文件重置为0;


·输入错误的用户名:

xpleaf@xpleaf-machine:~/seminar6/day1$ python newlogin.py 
Username:klkdlf
Password:klkdf
Username or password wrong!

·只会提示用户名或密码错误,不会做相关文件记录;


--对两个用户xpleaf和yonghaoyip的测试


·为用户yonghaoyip添加相关文件信息:

xpleaf@xpleaf-machine:~/seminar6/day1$ head username.txt yonghaoyip_count.txt yonghaoyip_lock.txt yonghaoyip_passwd.txt 
==> username.txt <==
xpleaf
yonghaoyip

==> yonghaoyip_count.txt <==
0

==> yonghaoyip_lock.txt <==
0

==> yonghaoyip_passwd.txt <==
yonghaoyip123


·主要测试两个用户的count文件记录:

对用户yonghaoyip操作:
xpleaf@xpleaf-machine:~/seminar6/day1$ python newlogin.py 
Username:yonghaoyip
Password:klkdf
Username or password wrong!
And the username 'yonghaoyip' has 2 more chances to retry!
Username:yonghaoyip
Password:kldf
Username or password wrong!
And the username 'yonghaoyip' has 1 more chances to retry!
Username:Traceback (most recent call last):
  File "newlogin.py", line 8, in <module>
    name = raw_input('Username:').strip()
EOFError

对用户xpleaf操作:
xpleaf@xpleaf-machine:~/seminar6/day1$ python newlogin.py 
Username:xpleaf
Password:kkjlkdf
Username or password wrong!
And the username 'xpleaf' has 2 more chances to retry!
Username:xpleaf
Password:xpleaf123
xpleaf, welcome to our system!

查看两个用户对应的count文件记录:
xpleaf@xpleaf-machine:~/seminar6/day1$ head yonghaoyip_count.txt xpleaf_count.txt 
==> yonghaoyip_count.txt <==
2
==> xpleaf_count.txt <==
0

·可以看到两个用户的相关文件并不会相互影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值