编写登录窗口的具体步骤详解
思路:
1、参考模型,这个作业我参考了linux的登录认证流程以及结合网上银行支付宝等锁定规则;
1)认证流程参考的是Linux的登录:当你输入完用户名密码后再验证用户名是否存在用户是否被锁定,然后在验证密码是否正确,如果验证不过去只会告诉你验证失败,而不告诉你到底是用户名错误还是密码错误,增加了暴力破解的难度;
2)关于输入错误次数的计数和锁定,我参考的是银行和支付宝的做法,也就是只关心你输错了多少次,不关心输对了多少次,也就是说输错了两次,第三次输对了,前面的计数不清零,也就是你今天输入了1000次输对了997次,只输错了3次,那对不起,依然要锁定。而且输入错误的3次不一定要连续。只要三次输入错误三次就锁定。
2、关于计数和状态的保存我考虑还是通过文件来持久化保存,每次输入错误次数的累加和锁定都保存到文件中,这样虽然增加了文件的操作,但是保证了程序的可靠性,这样程序退出,计数依然有效。文件类型如下:
alex sb lock 3
tom 666 unlock 0
geng 888 unlock 2
其中第一列是用户名,第二列是密码,第三列是用户状态(lock代表锁定,unlock代表没有锁定),第四列是登录次数(其实,登录次数只要错误的时候登录次数加一即可,没有错误的时候不用管它)。
代码如下:
with open(filename,) key,values lines = print( f.write( .join(lines) + values.insert( f.write( .join(values) + # messages = {:[,,],:[,,],:[,, # write_file(messages, __name__ == active = username = input( users_dict = {} #用户字典,用于存放用户的信息,键-用户名,值- with open(,) lines = line user_list = users_dict[user_list[]] = user_list[ username users_dict[username][] == print( (users_dict[username][]) < user_pwd = input( users_dict[username][] == print( (users_dict[username][]) != print( % ( - (users_dict[username][ users_dict[username][] = (users_dict[username][]) + print( users_dict[username][] = users_dict[username][] = write_file(users_dict, elif username == print() 运行结果如下: 请输入你的用户名(输入quit退出):tom 请输入密码:22 还有2次机会,用户将被锁定! 请输入密码:22 还有1次机会,用户将被锁定! 请输入密码:22 对不起,您输入的次数过多,你的用户名已经被锁定,请联系管理员! 请输入你的用户名(输入quit退出):alex 您输入的用户名已经锁定,请联系管理员!
其实对文件的操作,其本质上还是对字符串列表,字典的操作,文件的操作,读取文件的方法,readlines()按行读取存放到一个列表中,使用dict(字典)记录用户信息。字符串的拼接(join)方法,(" ".join(list)),字符串与列表进行拼接,形成一个新的字符串,其实字符串的本质上在python中存储的形式就是以列表的形式存储,列表之间的拼接,list.extend(list),列表之间的拼接。
代码说明:
1、这里用了两个今天课程没有讲的内容:字典和函数,将用户信息以字典的方式保存是出于判断用户名是否存在的考虑,读文件的时候直接将用户名作为字典的一个key,其他的信息作为字典的value与key一一对应,这样在判断用户名是否存在只需要通过in这个成员运算符进行判断就可以了;
2、代码的第61和62两行代码完成的就是将文件变成字典的过程。
原创张晓宇代码实例:
#!/usr/bin/env python3 # coding:utf-8'''Created on: 2015年12月29日 @author: 张晓宇 Email: 61411916@qq.com Version: 1.0Description: 输入用户名密码,认证成功显示欢迎信息,认证失败,输错三次后锁定 Help:'''import os # 定义用户信息写入函数,用于把用户信息写回文件 def write_to_account_file(accounts,account_file_path):"""accounts是一个用户信息字典,目的是把变更过的信息写入文件中"""account_file = open(account_file_path,"w")for key,val in accounts.items(): line = [] line.append(key) line.extend(val) print(" ".join(line)) #字符串与列表拼接,目的是实现列表中每个元素加空格生成一个字符串如a b c d格式 account_file.write(" ".join(line) + "\n") #往文件中添加信息 account_file.close() #直接打开文件的时候一定要记得关闭文件,以免文件休息丢失if __name__ == '__main__':''' @parameters: account_file_path:账户文件 password_col_num:账户文件中密码所在的列(从0开始) status_col_num:账户文件中账户状态所在的列(从0开始) error_count_num:账户文件中输入错误次数所在的列(从0开始) app_info:系统信息,用户启动应用后的输出 welcome_msg:用户成功登录后的信息''' account_file_path = 'account.db'password_col_num = 1status_col_num = 2error_count_num = 3app_info = ''' +---------------------------------+ | Welcome to gcx system | | Version:2.0 | | Author:zhuzhu | +---------------------------------+''' welcome_msg = "Welcome %s,authentication is successful!"if os.path.exists(account_file_path): #os.path.exists()判断文件是否存在,返回布尔值 # 判断账户文件是否存在 account_file = open(account_file_path,"r")else: #文件不存在,看系统是否有误 print("Error:Account file 'account.db' is not exit,please check!") exit(1) #读账户文件 accounts = {}for line in account_file.readlines(): #按行读取文件 account = line.strip().split() #清楚空格后进行分列,生成一个列表 accounts[account[0]] = account[1:]"""把列表中的第一个元素(用户名)当做键,用户的其他信息当做值,组成键值对存放在字典中""""""account[0]键,account[1:]是值"""account_file.close() #关闭文件 flag = Truewhile flag: print(app_info) #输入用户名 username = input("Username(Enter quit to exit): ").strip() #判断用户是否输入的为quitif username == "quit": #是则退出循环,程序结束breakpassword = input("Password: ").strip() #判断用户名是否存在if username not in accounts.keys(): #不存在提示错误信息并退出当前循环让用户重新输入 print("Error:Username or Password it is error!")continue #结束本次循环,让用户再次输入用户名和密码,继续执行下一次循环if accounts[username][status_col_num - 1] == "lock": #如果被锁定退出当前循环让用户重新输入 print("Error:Account is locked.Please contact the administrator!")continue #跳过本次循环,让用户重新输入进行验证,这个可以避免很多缩进,能够继续执行下一次 #判断用户密码是否正确if password == accounts[username][password_col_num - 1]: #正确显示欢迎信息 print(welcome_msg %username)breakelse: #用户密码不正确的情况 #提示用户名或密码错误 print("Error:Username or Password it is error!") #输入错误次数加1 accounts[username][error_count_num - 1] = str(int(accounts[username][error_count_num - 1]) + 1) #判断是否已经达3次if int(accounts[username][error_count_num - 1 ]) == 3: #如果输入错误达到3次 #提示账户将被锁定 print("Error: This account will be locked,Please contact the administrator!System will be exit!") #将用户状态改为lock并写入文件 accounts[username][status_col_num - 1] == "lock"write_to_account_file(accounts,account_file_path)breakwrite_to_account_file(accounts,account_file_path)
上面代码中亮点:
(1)continue:结束本次循环,continue后面的代码都不执行,达到重新让用户输入的目的,很多网页都是让用户一直输入,知道用户要么选择注册,要么关掉网页;
(2)文档的规范性比较好,有解释;
(3)文件就是一行一行读,然后一行一行写入文件,修改的过程中要用到列表和字典的知识;
(4)" ".join(list)字符串与列表的拼接,生成新的字符串;
(5)split()字符串的分割;extend()列表之间的拼接。
以上是编写登录窗口的具体步骤详解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

当你在自己电脑上登过别人steam账号之后,恰巧这个别人的账号也有wallpaper软件,切换回自己账号之后steam就会自动下载别人账号订阅的壁纸,用户可以通过关闭steam云同步解决。wallpaperengine登录别的号后下载别人的壁纸怎么办1、登陆你自己的steam账号,在设置里面找到云同步,关闭steam云同步。2、登陆你之前登陆的别人的steam账号,打开wallpaper创意工坊,找到订阅内容,然后取消全部订阅。(以后防止找不到壁纸,可以先收藏再取消订阅)3、切换回自己的stea

随着社交媒体的迅速发展,小红书已经成为许多年轻人分享生活、探索新产品的热门平台。在使用过程中,有时用户可能会遇到登录以前账号的困难。本文将详细探讨如何解决小红书登录旧账号的问题,以及如何应对更换绑定后可能遗失原账号的情况。一、小红书怎么登录以前的账号?1.找回密码登录如果长时间未登录小红书,可能导致账号被系统回收。为了恢复访问权限,你可以尝试通过找回密码的方式重新登录账号。操作步骤如下:(1)打开小红书App或官网,点击“登录”按钮。(2)选择“找回密码”。(3)输入你注册账号时所使用的手机号码

Discuz后台登录问题解决方法大揭秘,需要具体代码示例随着互联网的快速发展,网站建设变得越来越普遍,而Discuz作为一款常用的论坛建站系统,受到了许多站长的青睐。然而,正是因为其功能强大,有时候我们在使用Discuz的过程中会遇到一些问题,比如后台登录问题。今天,我们就来大揭秘Discuz后台登录问题的解决方法,并且提供具体的代码示例,希望能帮助到有需要

山野间万鬼嘶鸣,隐没兵刃交接之声,越岭奔赴而来的鬼将,心中战意汹涌,以炎火为号,率百鬼冲锋迎战。【炽焱百炼•茨木童子典藏皮肤上线】鬼角炽焰怒燃,鎏金眼眸迸发桀骜战意,白玉甲片装点战袍,彰显大妖不羁狂放的气势。雪白飘扬的袖摆上,赤焰攀附交织,金纹烙印其中,燃点一片绯艳妖异色彩。妖力凝聚而成的鬼火咆哮而至,烈焰令群峦为之震动,炼狱间归来的妖鬼啊,一同惩戒进犯之人吧。【专属动态头像框•炽焱百炼】【专属插画•焰火将魂】【传记鉴赏】【获取方式】茨木童子典藏皮肤·炽焱百炼将于12月28日维护后上架皮肤商店,

谷歌浏览器怎么设置每次打开都是新的窗口?狠毒用户喜欢使用谷歌浏览器办公或者学习,这款浏览器具有安全、快速、便捷的特点,不同的用户使用浏览器的喜好不同,一些用户喜欢打开谷歌浏览器就是新的标窗口,方便快速搜索,那么如何设置呢。接下来小编就给大家带来谷歌浏览器每次打开都是新的窗口设置教程,感兴趣的朋友快来学习一下吧。谷歌浏览器每次打开都是新的窗口设置教程1、将电脑桌面上的谷歌浏览器双击打开之后,点击右上角的【三个点】的图标位置进行单击。2、找到【设置】这个选项进入到页面中(如图所示)。3、进入到谷歌浏

近日有一些小伙伴咨询小编快手电脑版怎么登录?下面就为大家带来了快手电脑版的登录方法,有需要的小伙伴可以来了解了解哦。第一步:首先在电脑的浏览器上百度搜索快手官网。第二步:在搜索结果列表里面选取第一条。第三步:进入到快手官网主页面后,点击视频的选项。第四步:点击右上角的用户头像。第五步:在弹出的登录菜单里面点击二维码登录。第六步:之后打开手机上的快手,点击左上角的图标。第七步:点击二维码标志。第八步:在我的二维码界面点击右上角的扫描图标之后,扫描电脑上的二维码即可。第九步:最后电脑版的快手就登录成

夸克怎么登录两个设备?夸克浏览器是支持同时登陆两个设备的,但是多数的小伙伴不知道夸克浏览器如何登陆两个设备,接下来就是小编为用户带来的夸克登陆两个设备方法图文教程,感兴趣的用户快来一起看看吧!夸克浏览器使用教程夸克怎么登录两个设备1、首先打开夸克浏览器APP,主页面点击【夸克网盘】;2、接着进入到夸克网盘界面,选择【我的备份】服务功能;3、最后选择其中的【切换设备】即可更换新设备登陆两个。

小红书如今已经融入了许多人的日常生活,其丰富的内容和便捷的操作方式让用户乐此不疲。有时候,我们可能会忘记账号密码,只记得账号而无法登录确实让人感到困扰。一、小红书只记得账号怎么登录?当忘记密码时,我们可以通过手机验证码的方式登录小红书。具体操作如下:1.打开小红书App或网页版小红书;2.点击“登录”按钮,选择“账号密码登录”;3.点击“忘记密码?”按钮;4.输入你的账号,点击“下一步”;5.系统会发送验证码到你的手机,输入验证码后点击“确定”;6.设置新的密码并确认。你还可以通过第三方账号(如
