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开发应用实战》身份验证的改进
在我学习用户身份验证的时候,我发现这里有个小弊端,在用户注册完成后想要验证邮箱的时候,点击邮箱中的网址进行验证,此时还要登陆,这及其不符合我们的习惯.一般情况下我们只需要点击网址就可以验证成功并且进入 ...
随机推荐
- [转帖]linux操作系统测试工具
linux操作系统测试工具 http://cfdtesting.com/879156.html 作者: minions_222 来源: CFDTesting.com采编 发布于: ...
- IdentityServer4 学习三
ClientCredentials客户端类型实现 客户端应用向IdentityServer请求AccessToken,IdentityServer验证通过把AccessToken返回给客户端应用,客户 ...
- Python05之常用操作符
主要有三类:算数运算符,比较运算符,逻辑运算符 一.算数运算符: 加(+)减(-)乘(*)除(/)幂运算(**)地板除(//)取余数(%) 注:/和//的区别: 数据1 / 数据2 = 数据3 ( ...
- 细说浏览器输入URL后发生了什么
本文摘要: 1.DNS域名解析: 2.建立TCP连接: 3.发送HTTP请求: 4.服务器处理请求: 5.返回响应结果: 6.关闭TCP连接: 7.浏览器解析HTML: 8.浏览器布局渲染: 总结 ...
- CSS实现自适应分隔线的N种方法
分割线是网页中比较常见的一类设计了,比如说知乎的更多回答 这里的自适应是指两边的横线会随着文字的个数和父级的宽度自适应 偷偷的看了一下知乎的实现,很显然是用一块白色背景覆盖的,加一点背景就露馅了 心想 ...
- oracle update left join 写法
oracle update left join 写法 (修改某列,条件字段在关联表中) 案例: E:考核表 X,:用户表 USERNAME 关联 需求:修改营业部最高分 分析:通过登录账号的营业部OR ...
- Java安装和环境配置
Java安装和环境配置 从事Java开发第一关就是安装JAVA环境. 我们要安装JDK, 全称Java开发全套. 其中包含了JRE(运行时环境), 如果你打游戏的时候可能会提示你缺少JRE. 我们要做 ...
- java 任务定时调度(定时器)
任务定时调度 通过Timer和Timetask,我们可以实现定时启动某个线程. java.util.Timer 在这种实现方式中,Timer类作用是类似闹钟的功能,也就是定时或者每隔一定时间触发一次线 ...
- java开发中常用语(词汇)含义
DAO:Data Access Objects(数据存取对象): DTO:Data Transfer Object: AR:active record:
- iOS - Scenekit3D引擎初探之 - 给材质贴图
今天简单说一下 SceneKit 给材质贴图. 1,最简单的一种方法,直接打开dae 或者 scn 文件直接设置 如上图,这个dae 文件中只有一个几何体,几何体中只有一个材质球,然后设置材质球的d ...


