• python实例1:创建一个登陆模块


    实现功能:

      1、用户输入账户密码

      2、验证账户是否存在于黑名单,如果存在于黑名单,则执行1,否则往下执行

      3、验证用户名和密码。

        3.1、如果验证成功,则打印欢迎信息并退出程序;

        3.2、如果用户名存在,但是密码错误,则记录这个账户的错误次数(当前会话有效)

          3.2.1、如果错误次数等于等于3,则将这个用户写入锁定文件保存

      4、当错误次数(用户名存在但是密码错误 + 用户名不存在)大于等于3时,sleep(5),然后重置错误次数
    1. #!/usr/bin/env python3  
    2. __author__ = 'DSOWASP'  
    3. import getpass  
    4. import time  
    5.   
    6. error_count = 0             #认证错误次数,包括用户名错误和用户名正确但是密码错误  
    7. error_users = []            #用于存放用户名存在,但是密码错误的列表,存放数据格式如:  
    8. # [{'name':'ds','count':1},{'name':owasp','count':2}],当某个用户的count为3时,就把这个  
    9. # 用户加到locklist.txt文件中, 由于error_users保存在内存中,因此只有在当前会话有效  
    10.   
    11. flag1 = 0    #0表示用户名不存在,1表示用户名密码正确,2表示用户名正确,但是密码错误  
    12. flag2 = 0    #0表示当前用户不存在与error_users中,1当前用户存在于error_users中或error为非空  
    13. while True:  
    14.     username = input("用户名:").strip()  
    15.     password = input("密码:").strip()  
    16.     if username == "EXIT":                 #为了能正确退出程序而设置的  
    17.         break  
    18.     flag1 = 0  
    19.     with open('locklist.txt','r') as f_lock:   #验证此用户是否被锁定  
    20.         u1 = f_lock.read().split(" ")  
    21.         if u1.count(username) != 0:  
    22.             print("此账户已被锁定!请选择其他账户登录")  
    23.             time.sleep(1)  
    24.             continue  
    25.     with open('userlist.txt','r') as f_user:         #验证用户名和密码  
    26.         for line in f_user:  
    27.             user = line.split()[0]  
    28.             passwd = line.split()[1]  
    29.             if username == user:  
    30.                 if password == passwd:                  #用户和密码都正确,设置flag=1  
    31.                     print("Welcome to My Python Page!!!")  
    32.                     flag1 = 1  
    33.                     break  
    34.                 elif flag2 == 1:                       #密码不对,且当前error_users为非空  
    35.                     flag1 = 2                           #用户名正确,但是密码不对  
    36.                     for i in error_users:              #判断这个用户是否已存在于error_users中  
    37.                         # print("循环字典1",error_users)  
    38.                         if username == i.get("name"): #在error_users中找到了这个账户  
    39.                             # print("找到字典元素:",username,error_users)  
    40.                             flag2 = 1                  #当前用户存在于error_users中  
    41.                             i["count"] = i.get("count") + 1          #置当前用户的密码错误次数加1  
    42.                             if i.get("count") >= 3:                   #如果错误次数等于3  
    43.                                         with open('locklist.txt','a') as f_lock:         #就锁定这个账户  
    44.                                             f_lock.write(" %s" % username)  
    45.                                             print("输入错误次数过多,%s账户已被锁定!请联系管理员!" %(username))  
    46.                             else:                     #如果错误次数小于3,则打印提示信息  
    47.                                 print("用户%s已输入错误密码%d次,此账户还剩%d次尝试机会" % (i.get("name") , i.get("count"),3 - i.get("count")))  
    48.                             break                     #如果再error_users中找到了当前的用户,则退出error_users的循环  
    49.                         else:                         #如果在error_users中没找到这个用户,则打印提示信息,并设置flag2=0  
    50.                             flag2 = 0  
    51.                 if flag2 == 0:                        #添加当前用户到error_users中。  
    52.                     flag1 = 2                         #用户名和密码都不正确  
    53.                     print("添加前字典情况",error_users)  
    54.                     error_users.append({'name':username,'count':1})  
    55.                     print("用户%s已输入错误密码1次,此账户还剩2次尝试机会" % (username))  
    56.                     print("添加%s用户到字典"%username)  
    57.                     print(error_users)  
    58.                     flag2 = 1                        #设置flag2=1表示error_users为非空  
    59.   
    60.     if flag1 == 1:                                   #flag1=1表示用户名密码正确,则退出  
    61.         break  
    62.     elif flag1 == 0:                                 #flag=0表示用户名不存在斌,error_count加1  
    63.         error_count += 1  
    64.         print("用户名不存在,请重新输入,还剩%d次尝试机会" %(3 - error_count))  
    65.     elif flag1 == 2:                                 #flag1=2表示用户名正确但是密码错误.error_count 加1  
    66.         error_count += 1  
    67.     if error_count >= 3:                             #如果输错的此时大于等于3则打印提示信息,并sleep5秒,重置error_count  
    68.         print("输入错误次数超过3次,请5秒后重新输入")  
    69.         error_count = 0  
    70.         time.sleep(5)  
  • 相关阅读:
    Python爬虫入门教程 53-100 Python3爬虫获取三亚天气做旅游参照
    计算机大专学历,2019如何应届毕业薪水过万!
    Python爬虫入门教程 52-100 Python3爬虫获取博客园文章定时发送到邮箱
    Python爬虫入门教程 51-100 Python3爬虫通过m3u8文件下载ts视频-Python爬虫6操作
    Python爬虫入门教程 50-100 Python3爬虫爬取VIP视频-Python爬虫6操作
    nvm-windows
    如何进行 IIS Log 分析
    常用 Jenkins 配置
    Jenkins 插件安装问题
    常用 SQL Server 脚本
  • 原文地址:https://www.cnblogs.com/weikunzz/p/6710566.html
Copyright © 2020-2023  润新知