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

时间:2023-12-15 16:09:32

Python tkinter 实现简单登陆注册

最终效果

  1. 开始界面

    • Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

  2. 注册

    • Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

    • Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

    • Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证

  3. 登陆

    • Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证


源码

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三层体系结构,实现用户身份验证,实验。