我们可以很容易地用Python实现一个用户登录系统,相信这即使是对编程新手来说也是小菜一碟。

作为Python的小萌新,今天我想记录下来的是如何实现一个连接了MySQL数据库的用户登录注册系统,它的效果图大概如下:

该系统能连接到MySQL中我创建的“用户信息”表(下图为navicat中显示的表信息)。

该系统能对数据库中的此表进行查询和插入的操作,从而达到登录和注册的功能。

其中登录满足下列限制条件:

1、输入的用户名和密码不得为空;

2、用户名和密码需与表中的记录对应。

注册满足:

1、用户名和密码不得为空;

2、不可以注册已存在的用户名。

系统的实现大致分为两部分,一部分是数据库的连接,一部分是界面的设计,下面我先贴上代码,再进行说明。

import MySQLdb

from tkinter import *

from tkinter import messagebox

# 连接数据库

class MysqlSearch(object):

def __init__(self):

self.get_conn()

# 获取连接

def get_conn(self):

try:

self.conn = MySQLdb.connect(

host='127.0.0.1',

user='root',

passwd='',

db='personnelmanagement',

charset='utf8'

)

except MySQLdb.Error as e:

print('Error: %s' % e)

# 关闭连接

def close_conn(self):

try:

if self.conn:

self.conn.close()

except MySQLdb.Error as e:

print('Error: %s' % e)

# 获取用户信息(登录用)

def get_userinfo(self):

sql = 'SELECT * FROM 登陆账户'

# 使用cursor()方法获取操作游标

cursor = self.conn.cursor()

# 使用execute()方法执行SQL语句

cursor.execute(sql)

# 使用fetchall()方法获取全部数据

result = cursor.fetchall()

# 将数据用字典形式存储于result

result = [dict(zip([k[0] for k in cursor.description],row)) for row in result]

# 关闭连接

cursor.close()

self.close_conn()

return result

# 注册

def insert_userinfo(self,a,b):

self.a = a

self.b = b

sql = 'SELECT * FROM 登陆账户'

cursor = self.conn.cursor()

cursor.execute(sql)

result = cursor.fetchall()

result = [dict(zip([k[0] for k in cursor.description],row)) for row in result]

ulist = []

for item in result:

ulist.append(item['用户名'])

try:

# sql = 'INSERT INTO 登陆账户(用户名,密码) VALUES(%s,%s)'

cursor = self.conn.cursor()

cursor.execute('INSERT INTO 登陆账户(用户名,密码) VALUES(%s,%s)',(self.a,self.b))

if self.a == '' or self.b == '':

self.conn.rollback()

messagebox.showerror('警告',message = '注册失败')

elif self.a in ulist:

messagebox.showerror('警告',message = '用户名已存在')

else:

# 提交事务

self.conn.commit()

messagebox.showinfo(title = '恭喜',message = '注册成功')

cursor.close()

self.close_conn()

except:

# 限制提交

self.conn.rollback()

def cancel():

# 清空用户输入的用户名和密码

user.set('')

passwd.set('')

# 注册按钮事件的处理函数

def register():

register_name = entry_user.get()

register_pwd = entry_passwd.get()

obj_r = MysqlSearch()

obj_r.insert_userinfo(register_name,register_pwd)

def login():

# 获取用户名和密码

obj = MysqlSearch()

result = obj.get_userinfo()

name = entry_user.get()

pwd = entry_passwd.get()

ulist = []

plist = []

for item in result:

ulist.append(item['用户名'])

plist.append(item['密码'])

deter = True

for i in range(len(ulist)):

while True:

if name == ulist[i] and pwd == plist[i]:

messagebox.showinfo(title = '恭喜',message = '登陆成功')# 登陆成功则执行begin函数

deter = False

break

else:

break

while deter:

messagebox.showerror('警告',message='用户名或密码错误')

break

# 创建应用程序窗口

win_login = Tk()

win_login.title('人事管理系统登录')

# 禁止拉伸窗口

win_login.resizable(width = False, height = False)

win_login.geometry('600x300+382+183')

# 在窗口上创建标签组件

Label(win_login,text='用户名',font = ('微软雅黑'),justify=RIGHT,width=80).place(x=190,y=50,width=80,height=40)

Label(win_login,text='密码',font = ('微软雅黑'),justify=RIGHT,width=80).place(x=190,y=100,width=80,height=40)

# 创建字符串变量和文本框组件,同时设置关联的变量

# 用户名

user = StringVar(win_login,value='')

entry_user = Entry(win_login,width=80,textvariable=user)

entry_user.place(x=310,y=50,width=80,height=40)

# 密码

passwd = StringVar(win_login,value='')

entry_passwd = Entry(win_login,show='*',width=80,textvariable=passwd)

entry_passwd.place(x=310,y=100,width=80,height=40)

# 按钮

Button(win_login,text='登录',font = ('微软雅黑'),command=login).place(x=150,y=150,width=80,height=50)

Button(win_login,text='注册',font = ('微软雅黑'),command=register).place(x=260,y=150,width=80,height=50)

Button(win_login,text='取消',font = ('微软雅黑'),command=cancel).place(x=370,y=150,width=80,height=50)

# 启动消息循环

win_login.mainloop()

tkinter模块是Python的标准Tk GUI工具包的接口,我们用两行代码调用:

from tkinter import *

from tkinter import messagebox

接下来先跳过类和函数部分,看程序界面实现的代码。由于我在代码中都加上了注释说明,因此这里我就不做过多说明。

MySQLdb不是Python自带的,需要自行安装。安装成功后用一行代码调用:

import MySQLdb

我创建了一个MysqlSearch类用来连接数据库,它继承了object类。其中除了__init__()以外,包含四个方法,分别是get_conn()、close_conn()、get_userinfo()、insert_userinfo()。

(1)get_conn() 方法用于获取连接,它是用MySQLdb调用connect() 方法实现的,方法中的host表示主机,常用‘localhost’或‘127.0.0.1’,user表示用户名,passwd表示密码,db表示所连接的数据库,charset表示编码方式,这其中还省略了一个默认的端口号port = '3306'。我们可以通过查看数据库中创建的连接属性,来对应地编写此处代码。

(2)close_conn() 方法用于关闭连接。

(3)get_userinfo() 方法用于查询数据库中“用户信息”表的记录,用于登录功能的实现。由于代码中有详细注释,这里不多说明。

(4)insert_userinfo() 方法用于对数据库中的“用户信息”表进行查询和插入操作,用于注册功能的实现。该方法中有两个参数a和b,分别对应用户名输入框和密码输入框输入的信息,我们用%s格式化的方法,将其写入sql语句中:

cursor.execute('INSERT INTO 登陆账户(用户名,密码) VALUES(%s,%s)',(self.a,self.b))

我们回过头来看到“登录”、“注册”、“取消”三个按钮的命令跳转(command)分别触发三个函数login()、register()、cancel()。

login() 函数中我们首先创建对象,调用MysqlSearch类中的方法get_userinfo(),查询并获取“用户信息”表的记录后,进行登录的判断。

register() 函数中往MysqlSearch类中的方法insert_userinfo() 传入输入框的输入的信息,作为参数并判断。

cancel() 函数中用set() 方法对输入框的信息进行清空处理。

至此,系统就做完啦!当然了,这只是一个非常简单的系统,但我认为它包含了很多必要的方法,对系统的进一步编写大有作用。

python 搭建登陆系统,用Python连接操作MySQL数据库,做一个简单的用户登录注册系统...相关推荐

  1. 关于unity连接MySQL数据库做一个简单的登陆注册系统

    这段时间为了大作业,作为一个菜鸟研究了好久的Unity连接数据库,那就整理一下然后写下来当作记录吧. 首先,unity连接MySQL要先在Assets板上创建pluging文件夹再导入一些必要的dll ...

  2. c 连接mysql批量存储数据库_C语言连接操作MySQL数据库的方法

    C语言连接操作MySQL数据库的方法 2014-07-13 16:20来源:中国存储网 导读:C语言连接mysql数据库,需要相应的头文件和lib文件,如果你安装Mysql数据库,会在安装目录下找到这 ...

  3. clistctrl控件最后插入在后面_用图表控件做一个简单的员工信息查询系统

    前几天在上课的时候有同学说在做人员的信息查询的时候,经常的要去做查找搜索很麻烦,能不能做一个简单的人员信息查询系统,只需要选择人员的编号就可以查询到这个员工的信息.其实要实现这个同学的需求在EXCEL ...

  4. 安卓 spinner下拉框 做模糊查询_用图表控件做一个简单的员工信息查询系统

    前几天在上课的时候有同学说在做人员的信息查询的时候,经常的要去做查找搜索很麻烦,能不能做一个简单的人员信息查询系统,只需要选择人员的编号就可以查询到这个员工的信息.其实要实现这个同学的需求在EXCEL ...

  5. java jsp登录界面设计,用户登录注册系统(基于JSP和Servlet)

    准备工作 开发环境准备 开发工具:eclipse 4.3 技术语言:Java SE 1.7 依赖控制:Maven 3.0.4 服务器:Tomcat 7.0.68 操作系统:Windows 10 搭建一 ...

  6. Python MySQLdb模块连接操作mysql数据库实例_python

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  7. php mysqldb 数据库切换,Python MySQLdb模块连接操作mysql数据库实例

    mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql ...

  8. python连接操作mysql数据库使用详解

    在python3中,有个模块pymysql,用户可以通过这个模块实现远程对mysql数据库的操作. 1.python操作mysql流程架构 2 .python操作mysql使用演示 1.安装并且导入包 ...

  9. python查询mysql数据库_用python操作mysql数据库(之简单查询操作)

    1.mysql安装 此处省略一万字....... 2.pip安装MySQLdb模块 sudo pip install mysql-python 3.简单代码#!/usr/bin/env python ...

最新文章

  1. 2019全国普通高校学科竞赛排行榜发布
  2. 1061 判断题(PAT乙级 C++)
  3. C语言实用算法系列之memcpy、memmove函数原理与实现
  4. 中国电子协会考评中心_中国电子学会考评中心和CPA青少年编程能力等级测评有什么不同?...
  5. Vb.net/VB 声明API功能父窗口功能
  6. 如何在WPF 表格中嵌套按钮
  7. 牛客小白月赛9: div.2 A(线性筛)
  8. Linux文件打包压缩详解
  9. opencv中rect的用法
  10. 计算机图形函数,计算机图形学常用函数.ppt
  11. 如何使用 Web Speech API 在浏览器中识别语音
  12. RK3066 实现LED闪烁的代码分析
  13. Step05:爬虫小项目,爬取最新电影迅雷下载地址
  14. 如何开始创业(催生全美最大孵化器YC的文章)
  15. 使用QVE视频转换器制作gif动图
  16. Centos下如何永久修改系统时间 hwclock
  17. 晋城联通dns服务器位置,山西联通dns服务器地址
  18. BUUCTF [HITCON 2016] Leaking
  19. 位深度8位什么水平_2位3通电磁阀是什么,2位3通电磁阀工作原理
  20. [九度][何海涛] 重建二叉树

热门文章

  1. CMake的一些细节
  2. 2022-2023年度必备宇宙最全Windows系统软件清单
  3. linux系统变双屏,Ubuntu Linux下双屏显示解决方案
  4. Bty全国首个PHP宝塔,宝塔Bty分销系统 Bty3安装教程
  5. python列表输出学生姓名学号链表_1. 建立一个学生信息的循环链表,每个节点里面包含了学生学号、姓名、籍贯三个信息。通过遍历,输出链表...
  6. 安装Adobe Flash CS5出错的解决办法(Exit Code: 7 ERROR: Unable to get root from inChildPath)
  7. 推荐模型之DeepFM与DIN
  8. [BZOJ4605]崂山白花蛇草水(主席树套kd-tree)
  9. 十八数藏柏松:数字藏品拥有广阔的发展空间,能为社会输出更好的价值
  10. 这份 Android 性能优化手册 对标大厂!