Python tkinter 实现简单登陆注册 基于B/S三层体系结构,实现用户身份验证
Python tkinter 实现简单登陆注册
最终效果
开始界面

注册
登陆

源码
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三层体系结构,实现用户身份验证的更多相关文章
- 利用python实现简单登陆注册系统
#!/usr/bin/env python # -*- coding:utf-8 -*- def login(username,password): ''' :param username:用户名 : ...
- [小菜随笔]python tkinter实现简单的ping命令
本文主要是介绍python图形界面上的按键与实际功能的对接,其实编程掌握了基础之后的学习应该都是靠自己去挖掘其他的 在网上发现多半教程都是2的,故本文使用的是python3.5,其实也没什么区别,就有 ...
- html+css+js实现简单登陆注册页面
先看一下最终效果,登陆和注册 背景图片: 附源码: login.html <!DOCTYPE html> <html lang="en"> <head ...
- 三层架构(MVC)实现简单登陆注册验证(含验证码)
前言在我的上一篇微博里我已经提出了登陆的方法,当时我采取的是纯servlet方式,因为当时刚接触到servlet,正好网上没有这方面的全面讲解,所以我就发飙了.不过在现实生产中我们大多采用的三层架构. ...
- Springboot token令牌验证解决方案 在SpringBoot实现基于Token的用户身份验证
1.首先了解一下Token 1.token也称作令牌,由uid+time+sign[+固定参数]组成: uid: 用户唯一身份标识 time: 当前时间的时间戳 sign: 签名, 使用 hash/e ...
- 从零开始的SpringBoot项目 ( 八 ) 实现基于Token的用户身份验证
1.首先了解一下Token uid: 用户唯一身份标识 time: 当前时间的时间戳 sign: 签名, 使用 hash/encrypt 压缩成定长的十六进制字符串,以防止第三方恶意拼接 固定参数(可 ...
- IdentityServer4【Topic】之登陆注册
Sign-in 登陆注册 为了让标识服务器(identity server)代表用户发出令牌,该用户必须登录到标识服务器. Cookie authentication Cookie认证 身份验证是由来 ...
- python练习_简单登录
python练习_简单登录 需求: 做一个登录的小程序,验证用户与密码 要求登录三次错误后锁定 以下代码实现的功能与思路: 功能: 1.除admin以外的用户累计登录失败次数超过三次则锁定,此时需要管 ...
- 1.关于狗书《Flask Web开发 基于Python的web开发应用实战》身份验证的改进
在我学习用户身份验证的时候,我发现这里有个小弊端,在用户注册完成后想要验证邮箱的时候,点击邮箱中的网址进行验证,此时还要登陆,这及其不符合我们的习惯.一般情况下我们只需要点击网址就可以验证成功并且进入 ...
随机推荐
- springMVC设置不拦截静态资源的方法
SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决: 方案一.拦截器中增加针对静 ...
- 2018ACM-ICPC亚洲区域赛南京站I题Magic Potion(网络流)
http://codeforces.com/gym/101981/attachments 题意:有n个英雄,m个敌人,k瓶药剂,给出每个英雄可以消灭的敌人的编号.每个英雄只能消灭一个敌人,但每个英雄只 ...
- WUSTOJ 1341: Lake and Island(Java)
题目链接:1341: Lake and Island Description 北园孩子的专属福利来啦~学校从北区宿舍到湖心岛修建了一条通道让北园的同学们可以上去一(kuang)同(xiu)玩(en)耍 ...
- Gitlab服务不能启动postgresql
源博文:http://www.zxmseed.com/blog/911081 1.查看启动的服务 -sh-4.1$ gitlab-ctl status warning: gitlab-workhors ...
- 从C++到Qt(舍弃IDE或qmake、cmake等工具的束缚,尝试通过几个例子)
Qt 是 C++ 的库,Qt 在 ansi C++ 的基础上进行了一点扩展. 但国内似乎比较浮躁,学Qt的很多连基本的C++如何编译似乎都不太清楚.本文舍弃IDE或qmake.cmake等工具的束缚, ...
- wannafly 挑战赛10 小H和密码
题意:中文题就不解释了 题解: dp[i][j]表示前i 个轮盘 和一个字符串前j 个字符的匹配情况 ,具体的状态转移解释见代码 #include <cstdio> #include &l ...
- 使用async和await的异步编程
异步编程模型(TAP)提供了抽象的异步代码.异步代码看起来和同步代码没什么大的区别,无非多个了两个关键字(async和await).但是代码的执行顺序并没看起来那么简单,代码的执行顺序根据cpu资源的 ...
- mysql8.0入坑体验
正常从官网下载,并且正常安装,直到安装完成.然后用navicate连接,发现报错信息如下所示Client does not support authentication protocol reques ...
- Identityserver4证书
dotnet应用用IdentityServer4做了登陆的功能,本地运行没有问题,部署到服务器上面就出现上面的问题,打开服务器的日志记录开关,获取到下面的异常信息.原来是 通过分析日志信息 ...
- 最近跟进一个CS项目,用到c#基础知识,准备开个分类记录一下
C#在txt类文件中追加内容 string path = "test.txt";FileStream mystream = new FileStream(path, FileMod ...


