聊天室是通信工具,任何人都可以注册,注册好了下回人可以登录并载入相关信息,作为新手,如何把聊天室登录功能做到连接数据库就很重要,这里简单介绍一下,连接的数据库为MySQL为例
先写一个mysqlpython 文件,用模块pymysql连接数据库,操作数据库,代码见如下:
import pymysql
class MysqlPython:
def __init__(self,host='localhost',
user='root',
password='123456',
database='db5',
charset='utf8',
port=3306):
self.host=host
self.user=user
self.password=password
self.database=database
self.charset=charset
self.port=port
#定义两个方法,创建两个对象
def open(self):
self.db=pymysql.connect(host=self.host,
user=self.user,
password=self.password,
database=self.database,
charset=self.charset,
port=self.port)
self.cur=self.db.cursor()
def close(self):
self.cur.close()
self.db.close()
def Execution(self,sql,L=[]):
self.open()
self.cur.execute(sql,L)
self.db.commit()
self.close()
def Fetchall(self,sql,L=[]):
self.open()
self.cur.execute(sql,L)
#取出查询结果
result=self.cur.fetchall()
self.close()
return result
然后写登录功能,导入上面模块文件,达到登录信息用数据库存储与查询,具体代码见下面:
from mysqlpython import MysqlPython
from hashlib import sha1
#注册用户名功能
def register():
#创建数据库连接对象
sqlh=MysqlPython()
while True:
uname=input('请输入注册用户名:')
if not uname:
print('用户名不能为空')
continue
#查询数据库中用户表,查出结果为元祖(大元祖套小元组)
sele='select name from user where name=%s'
l=list(sqlh.Fetchall(sele,[uname]))
if len(l)!=0:
#元组中第一项为姓名
print('此用户名已注册,请重新注册!')
continue
else:
pwd1=input('请输入密码:')
pwd2=input('请再次输入密码:')
#注册成功后存入到数据库表中(表字段为姓名,密码)
#输入密码,让用户注册
if pwd1==pwd2:
#把密码加密存入数据库
#1创建sha1加密对象
s=sha1()
#2.加密,参数一定要为bytes数据类型
#加密只能对字节流加密,不能对字符串加密
s.update(pwd1.encode('utf-8'))
#3.返回十六进制加密结果
pwd=s.hexdigest()
#注册成功后存入到数据库表中(表字段为姓名,密码)
ins='insert into user values(%s,%s)'
sqlh.Execution(ins,[uname,pwd])
print('注册成功')
return
else:
print('两次密码不一致')
#登录验证功能
def logintest():#验证用户名密码输入正确否,可否登入
sqlh=MysqlPython()
count=0
while count<4:
uname = input('请输入用户名:')
pwd = input('请输入密码:')
count+=1
#到数据库查询该用户密码,查看是否为空
sele = 'select password from user where name = %s'
r=sqlh.Fetchall(sele,[uname])
s = sha1()
s.update(pwd.encode('utf-8'))
pwd = s.hexdigest()
if len(r) == 0:
print('用户名错误')
elif pwd == r[0][0]:
print('登录成功')
return uname
else:
print('密码错误')
else:
print('输错超过三次,停止输入')
return