Python tkinter 实现简单登陆注册

最终效果

  1. 开始界面

  2. 注册

  3. 登陆


源码

login.py

# encoding=utf-8
from tkinter import *
from tkinter import messagebox as tkMessageBox
import mysql_connect as mys
import pymysql
import base64 #加密 将用户的密码加密后储存到数据库
def encryption(str):
str=str.encode(encoding="utf-8")
s2=base64.b64encode(str)
return s2.decode() #解密 将数据库返回的密文解密后验证用户密码
def decryption(str):
str = str.encode(encoding="utf-8")
s1=base64.b64decode(str)
return s1.decode() #处理注册
def newuser(name,pwd):
#声明全局变量,传递给insert
global cursor,db
pwd=encryption(pwd) #加密
if mys.name_exist(cursor,name): #返回正确的值说明用户名存在
tkMessageBox.showinfo(title='失败', message='用户名已存在!')
return False
else:
mys.insert_data(db=db,cursor=cursor,name=name,password=pwd)
tkMessageBox.showinfo(title='成功', message='注册成功') #处理直接登录
def olduser(name,pwd):
global cursor
# print(name,pwd)
password=mys.get_password(cursor,name)
password=decryption(password) #解密
print("password : ",password)
print(pwd)
if password == pwd:
tkMessageBox.showinfo(title='成功', message='登陆成功! welcome back '+name)
else:
tkMessageBox.showinfo(title='失败', message='登录失败') #处理注册窗口
def signin():
win1 = Toplevel()
l1 = Label(win1, text="注册")
l1.pack() # 这里的side可以赋值为LEFT RTGHT TOP BOTTOM
l2 = Label(win1, text="姓名:")
l2.pack() # 这里的side可以赋值为LEFT RTGHT TOP BOTTOM
sheet_text1 = StringVar()
sheet1 = Entry(win1, textvariable=sheet_text1)
sheet1.pack() l3 = Label(win1, text="密码:")
l3.pack() # 这里的side可以赋值为LEFT RTGHT TOP BOTTOM
sheet_text2 = StringVar()
sheet2 = Entry(win1, textvariable=sheet_text2)
sheet2.pack() def on_click1():
name = sheet_text1.get()
pwd = sheet_text2.get()
#调用处理新用户窗口
newuser(str(name),str(pwd)) Button(win1, text="press", command=on_click1).pack() #处理登录窗口
def login():
# win1 = Tk.winfo_toplevel(root)
#焦点绑定到当前窗口,否则无法获取输入
win1 = Toplevel()
l4 = Label(win1, text="登录")
l4.pack() # 这里的side可以赋值为LEFT RTGHT TOP BOTTOM
l5 = Label(win1, text="姓名:")
l5.pack() # 这里的side可以赋值为LEFT RTGHT TOP BOTTOM
sheet_text3 = StringVar()
sheet3 = Entry(win1, textvariable=sheet_text3)
sheet3.pack() l6 = Label(win1, text="密码:")
l6.pack() # 这里的side可以赋值为LEFT RTGHT TOP BOTTOM
sheet_text4 = StringVar()
sheet4 = Entry(win1, textvariable=sheet_text4)
sheet4.pack() def on_click2():
name = sheet_text3.get()
pwd = sheet_text4.get()
olduser(name,pwd) Button(win1, text="press", command=on_click2).pack() #退出程序
def quit1():
root.quit() if __name__ == '__main__': try:
db = pymysql.connect("39.106.152.189", "study", "stfk0615", "study", use_unicode=True, charset='utf8')
cursor = db.cursor()
except:
print("connect error!") root = Tk()
root.title('用户登录窗口') #分别进入不同的窗口
Button(root, text="注册", command=signin).pack()
Button(root, text="登录", command=login).pack()
Button(root, text="退出", command=quit1).pack() root.mainloop()

mysql_connect.py //封装MySQL操作

import pymysql
# import traceback
def name_exist(cursor,name):
exist_sql="""
SELECT PASSWORD
FROM INFO
WHERE NAME='%s' ;"""%(str(name)) #字符串匹配替换 name
cursor.execute(exist_sql)
result=cursor.fetchall()
if result:
return True #表示存在、
else:return False #表示不存在
def insert_data(db,cursor,name,password):
#插入数据
insert_sql="""
INSERT INTO INFO(NAME,PASSWORD) VALUES('%s','%s');"""%(str(name),str(password))
try:
cursor.execute(insert_sql) #执行sql
db.commit()
return True
except Exception:
print(Exception.args)
print('insert error')
return False def creat_table(cursor,name):
# 创建数据表
sql="""
CREATE TABLE %s(
NAME CHAR(20) NOT NULL,
PASSWORD CHAR(20));
"""%(str(name)) try:
cursor.execute(sql)
return True
except:
print("creat_table error")
return False def get_password(cursor,name):
#得到name对应的密码
sql="""
SELECT PASSWORD
FROM INFO
WHERE NAME='%s' ;"""%(str(name)) #字符串匹配替换 name
try:
cursor.execute(sql)
result=cursor.fetchall() #得到所有的结果
for a in result: #遍历结果 实际上返回的应该就只要一个值
print(a[0])
return a[0]
except:
print("get_error")
return False def connect():
try:
db = pymysql.connect("39.106.152.189", "study", "stfk0615","study"
,use_unicode=True,charset='utf8')
#db.set_charset('utf-8')
cursor = db.cursor()
# cursor.execute('SET NAMES utf8;')
# cursor.execute('SET CHARACTER SET utf8;')
# cursor.execute('SET character_set_connection=utf8;')
return cursor
except:
print("connect error!")
return False
if __name__=='__main__':
db=pymysql.connect("39.106.152.189","study","stfk0615","study")
cursor=db.cursor() db.close()

转发请注明出处,谢谢。

本源码用于 基于B/S三层体系结构,实现用户身份验证,实验。

Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证的更多相关文章

  1. 利用python实现简单登陆注册系统

    #!/usr/bin/env python # -*- coding:utf-8 -*- def login(username,password): ''' :param username:用户名 : ...

  2. [小菜随笔]python tkinter实现简单的ping命令

    本文主要是介绍python图形界面上的按键与实际功能的对接,其实编程掌握了基础之后的学习应该都是靠自己去挖掘其他的 在网上发现多半教程都是2的,故本文使用的是python3.5,其实也没什么区别,就有 ...

  3. html+css+js实现简单登陆注册页面

    先看一下最终效果,登陆和注册 背景图片: 附源码: login.html <!DOCTYPE html> <html lang="en"> <head ...

  4. 三层架构(MVC)实现简单登陆注册验证(含验证码)

    前言在我的上一篇微博里我已经提出了登陆的方法,当时我采取的是纯servlet方式,因为当时刚接触到servlet,正好网上没有这方面的全面讲解,所以我就发飙了.不过在现实生产中我们大多采用的三层架构. ...

  5. Springboot token令牌验证解决方案 在SpringBoot实现基于Token的用户身份验证

    1.首先了解一下Token 1.token也称作令牌,由uid+time+sign[+固定参数]组成: uid: 用户唯一身份标识 time: 当前时间的时间戳 sign: 签名, 使用 hash/e ...

  6. 从零开始的SpringBoot项目 ( 八 ) 实现基于Token的用户身份验证

    1.首先了解一下Token uid: 用户唯一身份标识 time: 当前时间的时间戳 sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接 固定参数(可 ...

  7. IdentityServer4【Topic】之登陆注册

    Sign-in 登陆注册 为了让标识服务器(identity server)代表用户发出令牌,该用户必须登录到标识服务器. Cookie authentication Cookie认证 身份验证是由来 ...

  8. python练习_简单登录

    python练习_简单登录 需求: 做一个登录的小程序,验证用户与密码 要求登录三次错误后锁定 以下代码实现的功能与思路: 功能: 1.除admin以外的用户累计登录失败次数超过三次则锁定,此时需要管 ...

  9. 1.关于狗书《Flask Web开发 基于Python的web开发应用实战》身份验证的改进

    在我学习用户身份验证的时候,我发现这里有个小弊端,在用户注册完成后想要验证邮箱的时候,点击邮箱中的网址进行验证,此时还要登陆,这及其不符合我们的习惯.一般情况下我们只需要点击网址就可以验证成功并且进入 ...

随机推荐

  1. 简单实现SpringBoot启动

    一.准备: IDEA 使用简单手写导包实现spring boot,未使用idea自带的spring创建方法 可以更加简单理解springboot启动过程 二.开始 1.打开idea创建project ...

  2. STM32之串口硬件连接图

    笔记本USB转串口实物连接图: 电路连接图:

  3. Hello World详解

    Hello World 题目 [题目描述] 输出“Hello World!”(不输出“”). [输入格式] 啥都没有. [输出格式] Hello World! [数据规模] 输出就行了,管那么多干什么 ...

  4. deepin linux 打开ssh服务

    首先,更新一下软件源,打开"终端窗口",输入"sudo apt-get update"-->回车-->" 输入当前登录用户的管理员密码&q ...

  5. 18 JSON、JSON字符串、反序列化

    JSON教程 : https://www.runoob.com/python/python-json.html 概念 JSON是一种轻量级的数据交换格式,它是一种数据格式! JSON易于阅读.易于解析 ...

  6. Github相关问题集锦

    问题 对于我们国内用户,有时候浏览器在进入github网站时,会出现无法加载或加载很慢的问题,针对这一问题,很是头疼,为解决这一问题,在网上搜索到的解决方法如下: 解决方案 修改hosts文件,在ho ...

  7. Scratch编程:躲开鲨鱼(五)

    “ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这是一款简单的小游戏,实现了用鼠标控制一条小海星在水里游 ...

  8. Spring Boot集成Junit测试

    添加依赖: 在测试类上添加注解:

  9. mysql全面整理(用于复习、查阅)--正在更新

    Mysql学习 1. 关键字与函数名称全部大写 2. 数据库名称.表名称.字段名称全部小写 3. SQL语句必须以分号结尾 一.数据库基本操作 1. 创建.查看数据库 CREATE {DATABASE ...

  10. shell 学习笔记5-shell-if语句

    一.if条件语句 1.语法 1)单分支结构 第一种 if <条件表达式> then 指令 fi 第二种 if <条件表达式>:then 指令 fi 上文的"<条 ...