前言:
在上一篇的基础上点击查看上一篇内容,增加判断用户名是否存在,若存在则弹出对话框,若不存在则注册。如果不加以判断会发生什么,请看下图,这是账户信息中已注册的两个账号:

假如我们再注册一个账号,用户名也叫李四,密码为 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)相关推荐

  1. java 判断用户名_java如何判断用户名和密码

    java如何判断用户名和密码?Java验证用户名和密码 假设在某仓库管理系统的登录界面中需要输入用户名和密码,其中用户名只能由 6~10 位数字组成,密码只能有 6 位,任何不符合用户名或者密码要求的 ...

  2. java 判断用户名_java判断用户名和密码的方法

    java判断用户名和密码的方法 发布时间:2020-04-28 11:18:51 来源:亿速云 阅读:122 作者:小新 今天小编给大家分享的是java判断用户名和密码的方法,相信很多人都不太了解,为 ...

  3. 基于RSA加密和Tkinter可视化的密码存储程序(可用于期末作业设计、Python练习、实用应用;抗错误输入、抗密码盗取)二:登录、注册界面

    此篇接上篇,有兴趣的可以去主页或专栏看看,没有的话咱直接开始: 基于RSA加密和Tkinter可视化的密码存储程序(可用于期末作业设计.Python练习.实用应用:抗错误输入.抗密码盗取)一:思路介绍 ...

  4. ajax注册判断怎么写,ajax之判断用户名是否被注册

    /** * * @author liang * 需求:模拟注册校验: * 1:jsp页面放置一个text文本框,当用户输入用户名,文本框失去焦点的时候,通过ajax访问服务器 * 2:servlet模 ...

  5. Ajax——判断用户名是否已经注册

    1.1.Ajax 1.Ajax:异步的JavaScript and XML 2.目的:用来发送异步请求,然后当服务器给我想要的时候进行回调操作 3.好处:提高用户体验:局部刷新: 1.2.判断用户名是 ...

  6. 代码技巧1.类似于登录、注册界面要判断登录账号是不是空,验证码是否正确等,怎么写比较舒服一点?

    类似于登录.注册界面要判断登录账号是不是空,验证码是否正确等,怎么写比较舒服一点? case R.id.btn_get_verify_code://点击获取验证//业务需求 点击获取验证码的地方加上图 ...

  7. 判断用户名是否已被注册的三种方法

    在forms.py中写局部钩子函数 首先还是得先导入app里面的models #重写username字段的局部钩子def clean_username(self):username = self.cl ...

  8. python做一个登录注册界面_Python 实现简单的登录注册界面

    Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...

  9. 用户名唯一 php,AJAX检测用户名是否唯一

    大家都知道,很多网页注册的时候用户名重复就不能注册,本文通过实例代码给大家介绍了AJAX应用实例之检测用户名是否唯一,非常不错,具有参考借鉴价值,需要的朋友可以参考下,希望能帮助到打家. 先给大家展示 ...

  10. 注册界面的设计与实现

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...

最新文章

  1. 2021 火爆技术人朋友圈的实时音视频 RTC 你 Pick 了嘛?
  2. Java设计模式---外观模式
  3. N6-旋转数组的最小元素
  4. rasa聊天机器人_Rasa-X是持续改进聊天机器人的独特方法
  5. orm jdbc_Spring Data JDBC通用DAO实现–迄今为止最轻量的ORM
  6. jqgrid表格下拉搜索多选框优化—使用select下拉多选插件
  7. ubuntu16下安装mongodb 3.6
  8. 【python】字典的嵌套
  9. bp神经网络图像压缩原理图,bp神经网络图像分类
  10. linux系统富士通打印机驱动,PRIMERGY:驱动下载 - 富士通中国
  11. 如何搭建企业自己的邮箱服务器,企业如何搭建属于自己的企业邮箱
  12. 内存类型UDIMM、RDIMM、LRDIMM大解析
  13. [PS] 透明底图片制作
  14. 看懂:主动收入与被动收入
  15. 史上最快最新最全倾斜摄影(ContextCapture)空三/建模、单机/集群硬件配置方案2018
  16. ps和php有什么关系,lr和ps有什么区别
  17. XYNUOJ Six Degrees of Separation
  18. 苹果笔记本什么系统_苹果笔记本领域双系统
  19. Windows编程之核心书籍推荐
  20. *判断奇偶数的函数*/

热门文章

  1. 微信小程序跳转微信小程序的实现
  2. Express框架学习笔记-express路由参数
  3. shell编程四剑客之 find
  4. 求素数的python程序_Python编程新手看过来,如何求素数 (Python学习教程)
  5. 苹果充电器怎么辨别真假_9款热门充电器盘点——苹果、Anker、Thinkplus、紫米、小米、锤子,谁更值得买?...
  6. ubuntu网络设置找不到有线连接_win7系统找不到网络打印机如何解决?局域网打印机共享怎么设置?...
  7. python isnumberic用法_NETASST技术博客
  8. 路由器回执路由配置_三分钟学会路由器各参数功能及设置方法
  9. socket创建失败_python3从零学习-5.8.1、socket—底层网络接口
  10. c语言sqlite3删除最后一行,sqlite学习笔记11:C语言中使用sqlite之删除记录