1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python 搭建登陆系统 用Python连接操作MySQL数据库 做一个简单的用户登录注册系统...

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

时间:2023-06-27 07:58:53

相关推荐

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

我们可以很容易地用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:

# 提交事务

mit()

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() 方法对输入框的信息进行清空处理。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。