【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.实现代码与注释

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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个文件中添加相应信息:

1
2
3
4
5
6
7
8
9
10
11
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


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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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,再输入正确的用户名和密码:

1
2
3
4
5
6
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次:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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;


·输入错误的用户名:

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

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


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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
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文件记录:

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
对用户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

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

相关文章
|
22天前
|
C语言 Python
python 调用c接口
【10月更文挑战第12天】 ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用C DLL中的函数
40 0
|
27天前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
239 60
|
21天前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
3天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
8 2
|
26天前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
46 1
Python实用记录(十三):python脚本打包exe文件并运行
|
19天前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
20天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
26天前
|
JSON 数据格式 Python
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
这篇文章介绍了一个Python脚本,用于统计TXT或JSON文件中特定单词的出现次数。它包含两个函数,分别处理文本和JSON文件,并通过命令行参数接收文件路径、目标单词和文件格式。文章还提供了代码逻辑的解释和示例用法。
34 0
Python实用记录(十四):python统计某个单词在TXT/JSON文件中出现的次数
|
1月前
|
Python
Python对PDF文件页面的旋转和切割
Python对PDF文件页面的旋转和切割
|
1月前
|
计算机视觉 Python
Python操作PDF文件
Python操作PDF文件