Tkinter注册界面判断用户名是否唯一的合法性验证(Python3.7)
前言:
在上一篇的基础上点击查看上一篇内容,增加判断用户名是否存在,若存在则弹出对话框,若不存在则注册。如果不加以判断会发生什么,请看下图,这是账户信息中已注册的两个账号:
假如我们再注册一个账号,用户名也叫李四,密码为 lisi1234,看下会发生什么。我们看到账户信息里出现了两条用户名相同,但密码不同的账户。
这里要注意的是,虽然这样可以注册成功,但是一但到登录的环节就出现问题了,我们知道字典的键是唯一的,假如字典中有两个相同的键,打印输出的时候只会输出最后一个相同的键值对,举例说明
DIC = {“张三”:“123456”,“李四”:“abc123”,“李四”:“lisi1234”}
print(DIC)
输出结果:{“张三”:“123456”,“李四”:“lisi1234”}
这就是为什么用户注册账号时要判断用户名是否已经被注册的原因,那么我们就看下这个判断是否存在的代码,在上一篇给出的代码register方法里加入了以下内容,仅此而已,但要注意elif的缩进,其他的判断要加在username.get()不为空下面:
'''只有当用户名不为空才需要做判断'''elif username.get() != "":'''已只读方式打开文件'''f = open("D:\\账户信息.txt", mode="r", encoding="utf-8")'''逐行读取'''information = f.readlines()DIC = {} #创建空字典for i in range(len(information)): #遍历每一条数据存入字典DIC[information[i].split("\t")[0]] = information[i].split("\t")[1][0:-1]if username.get() in DIC.keys(): #判断用户名在字典的键里messagebox.showerror("警告",message="当前用户名: {0}\n已被注册,请更换".format(username.get()))
看到没,和第一条的键重复了
永远记着思路比结果重要,最后附上完整代码:
from tkinter import *
from tkinter import messagebox
import hashlibroot = Tk()
root.title("注册窗口演示")
root.geometry("400x250")
root.resizable(0, 0)
f1 = Frame(root)
f1.pack()
l1 = Label(f1, text="用户名").grid(row=0, column=0)
l2 = Label(f1, text="输入密码").grid(row=1, column=0)
l2 = Label(f1, text="再次确认").grid(row=2, column=0)def change():username.config(bg="white")return Truedef change2():password.config(bg="white")return Truedef change3():password_.config(bg="white")return Trueusername = Entry(f1, validate="focusin", validatecommand=change)
username.grid(row=0, column=1, pady=20)
password = Entry(f1, validate="focusin", validatecommand=change2)
password.grid(row=1, column=1)
password_ = Entry(f1, validate="focusin", validatecommand=change3)
password_.grid(row=2, column=1)def register():if username.get() == "":username.config(bg="Crimson")messagebox.showerror("提示", "用户名不能为空")elif username.get() != "":f = open("D:\\账户信息.txt", mode="r", encoding="utf-8")information = f.readlines()DIC = {}for i in range(len(information)):DIC[information[i].split("\t")[0]] = information[i].split("\t")[1][0:-1]if username.get() in DIC.keys():messagebox.showerror("警告",message="当前用户名: {0}\n已被注册,请更换".format(username.get()))elif password.get() == "":messagebox.showerror("提示", "密码不能为空")elif password.get() != password_.get():password.config(bg="Crimson")password_.config(bg="Crimson")password_.delete(0, END)messagebox.showerror("提示", "两次密码输入不一致")elif password.get() == password_.get():m = hashlib.md5("欢乐海岸".encode("utf-8"))m.update(password.get().encode("utf-8"))f = open("D:\\账户信息.txt", mode="a", encoding="utf-8")f.write(username.get() + "\t" + m.hexdigest() + "\n")print(m.hexdigest())f.close()messagebox.showinfo("提示", "注册成功")Button(f1, text="注册", width=10, command=register).grid(row=3, column=0, sticky=W, pady=5)
Button(f1, text="退出", width=10, command=root.quit).grid(row=3, column=1, sticky=E, pady=5)def readinfo():f = open("D:\\账户信息.txt", mode="r", encoding="utf-8")information = f.readlines()D = {}for i in range(len(information)):D[information[i].split("\t")[0]] = information[i].split("\t")[1][0:-1]print(D)f.close()Button(f1, text="读出账户信息", width=10, command=readinfo).grid(row=4, column=1, sticky=E, pady=5)root.mainloop()
Tkinter注册界面判断用户名是否唯一的合法性验证(Python3.7)相关推荐
- java 判断用户名_java如何判断用户名和密码
java如何判断用户名和密码?Java验证用户名和密码 假设在某仓库管理系统的登录界面中需要输入用户名和密码,其中用户名只能由 6~10 位数字组成,密码只能有 6 位,任何不符合用户名或者密码要求的 ...
- java 判断用户名_java判断用户名和密码的方法
java判断用户名和密码的方法 发布时间:2020-04-28 11:18:51 来源:亿速云 阅读:122 作者:小新 今天小编给大家分享的是java判断用户名和密码的方法,相信很多人都不太了解,为 ...
- 基于RSA加密和Tkinter可视化的密码存储程序(可用于期末作业设计、Python练习、实用应用;抗错误输入、抗密码盗取)二:登录、注册界面
此篇接上篇,有兴趣的可以去主页或专栏看看,没有的话咱直接开始: 基于RSA加密和Tkinter可视化的密码存储程序(可用于期末作业设计.Python练习.实用应用:抗错误输入.抗密码盗取)一:思路介绍 ...
- ajax注册判断怎么写,ajax之判断用户名是否被注册
/** * * @author liang * 需求:模拟注册校验: * 1:jsp页面放置一个text文本框,当用户输入用户名,文本框失去焦点的时候,通过ajax访问服务器 * 2:servlet模 ...
- Ajax——判断用户名是否已经注册
1.1.Ajax 1.Ajax:异步的JavaScript and XML 2.目的:用来发送异步请求,然后当服务器给我想要的时候进行回调操作 3.好处:提高用户体验:局部刷新: 1.2.判断用户名是 ...
- 代码技巧1.类似于登录、注册界面要判断登录账号是不是空,验证码是否正确等,怎么写比较舒服一点?
类似于登录.注册界面要判断登录账号是不是空,验证码是否正确等,怎么写比较舒服一点? case R.id.btn_get_verify_code://点击获取验证//业务需求 点击获取验证码的地方加上图 ...
- 判断用户名是否已被注册的三种方法
在forms.py中写局部钩子函数 首先还是得先导入app里面的models #重写username字段的局部钩子def clean_username(self):username = self.cl ...
- python做一个登录注册界面_Python 实现简单的登录注册界面
Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...
- 用户名唯一 php,AJAX检测用户名是否唯一
大家都知道,很多网页注册的时候用户名重复就不能注册,本文通过实例代码给大家介绍了AJAX应用实例之检测用户名是否唯一,非常不错,具有参考借鉴价值,需要的朋友可以参考下,希望能帮助到打家. 先给大家展示 ...
- 注册界面的设计与实现
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
最新文章
- 2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?
- Java设计模式---外观模式
- N6-旋转数组的最小元素
- rasa聊天机器人_Rasa-X是持续改进聊天机器人的独特方法
- orm jdbc_Spring Data JDBC通用DAO实现–迄今为止最轻量的ORM
- jqgrid表格下拉搜索多选框优化—使用select下拉多选插件
- ubuntu16下安装mongodb 3.6
- 【python】字典的嵌套
- bp神经网络图像压缩原理图,bp神经网络图像分类
- linux系统富士通打印机驱动,PRIMERGY:驱动下载 - 富士通中国
- 如何搭建企业自己的邮箱服务器,企业如何搭建属于自己的企业邮箱
- 内存类型UDIMM、RDIMM、LRDIMM大解析
- [PS] 透明底图片制作
- 看懂:主动收入与被动收入
- 史上最快最新最全倾斜摄影(ContextCapture)空三/建模、单机/集群硬件配置方案2018
- ps和php有什么关系,lr和ps有什么区别
- XYNUOJ Six Degrees of Separation
- 苹果笔记本什么系统_苹果笔记本领域双系统
- Windows编程之核心书籍推荐
- *判断奇偶数的函数*/
热门文章
- 微信小程序跳转微信小程序的实现
- Express框架学习笔记-express路由参数
- shell编程四剑客之 find
- 求素数的python程序_Python编程新手看过来,如何求素数 (Python学习教程)
- 苹果充电器怎么辨别真假_9款热门充电器盘点——苹果、Anker、Thinkplus、紫米、小米、锤子,谁更值得买?...
- ubuntu网络设置找不到有线连接_win7系统找不到网络打印机如何解决?局域网打印机共享怎么设置?...
- python isnumberic用法_NETASST技术博客
- 路由器回执路由配置_三分钟学会路由器各参数功能及设置方法
- socket创建失败_python3从零学习-5.8.1、socket—底层网络接口
- c语言sqlite3删除最后一行,sqlite学习笔记11:C语言中使用sqlite之删除记录