本文实例讲述了Python实现的登录验证系统。分享给大家供大家参考,具体如下:
小型登录注册验证系统
一、概述
使用Redis+MySQL数据库实现一个小型的登录注册验证系统。在这个系统中初步了解认识MVC框架。
具备功能:登录、注册、改密、注销。
数据库:Redis,MySQL。使用Redis把用户信息存储在内存中,查询数据快。MySQL存储空间更大,对表之间的关系管理更好。两者结合使用发挥各自的优势已是当下流行的数据库使用方式。
开发语言:Python。
MVC框架:MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
二、代码
完整实例代码点击此处本站下载。
GitHub地址:https://github.com/liangdongchang/pyCheckLoginSys.git
1、Init
用来初始化服务:
①、在mysql上新建一个数据库“homework”和建表”t_usr”
②、开启redis服务程序
'''
@author ldc
'''
import os
import pymysql
'''
初始化服务:
1、在mysql上新建一个数据库“homework”和建表"t_usr"
2、开启redis服务程序
'''
# 建立数据库连接
conn = pymysql.connect(
host='localhost',
user='root',
password="123456",
port=3306
)
# 获取游标
cursor = conn.cursor()
# 创建数据库
dbname = 'homework'
sql='''
create database if not EXISTS %s charset=utf8;
'''%dbname
cursor.execute(sql)
# 使用数据库
cursor.execute('use %s'%dbname)
# 创建表
sql = '''
create table if not EXISTS t_usr(
id INTEGER PRIMARY KEY auto_increment,
username varchar(20) unique not null,
password varchar(20) not null
);
'''
cursor.execute(sql)
# 关闭游标与连接
cursor.close()
conn.close()
# 开启redis服务,新建一个启动redisd.bat文件,
#以后开启redis服务就可以直接打开这个文件了
def openRedisd(path):
rPath = """@echo off
redis-server %s
pause"""%path
with open(r"C:\Users\LDCPC\Desktop\启动redisd.bat","w",encoding="ANSI")
as f:
f.write(rPath)
openRedisd(r"D:\ruanjian\redis-64.2.8.2101\redis.windows.conf")
# 打开文件“启动redisd.bat”
os.popen(r"C:\Users\LDCPC\Desktop\启动redisd.bat")
2、View层
用来与用户交互:接收用户的输入和显示结果给用户。
'''
@author ldc
'''
from controller import urls
from model.model import User
from utils.dbUtil import RedisUtil
'''
需求:登录注册验证
1、登录
2、注册
3、改密
4、注销
'''
# 主界面接口
def index():
while True:
#登录界面
print("********************************")
print("* *")
print("* (1) 登录 (2)注册 *")
print("* (3) 改密 (4)注销 *")
print("* (5)退出 *")
print("********************************")
print()
num = input("请输入功能序号:")
if num in ['1','2','3','4','5']:
return num
else:
print("输入有误,请重新输入!!!")
# 输入账号与密码
def inputInfo():
return input("请输入账号和密码(逗号隔开):").split(',')
if __name__ == '__main__':
# 连接redis数据库
RedisUtil.connect()
while True:
# 初始化界面
num = index()
# 输入账号密码
username, password = inputInfo()
# 实例化一个用户类
user = User(username, password)
if num == '1':
urls.login(user) #登录
elif num == '2':
urls.regist(user) # 注册
elif num == '3':
urls.changePasswd(user) # 改密
elif num == '4':
urls.deleteUser(user) # 注销
else:
break
3、Controller层
实现业务逻辑,控制整个系统的实现流程。
'''
@author ldc
'''
from model.model import UserDao
# 先查询该用户是否存在数据库中
def exists(user):
'''先查看Redis缓存中是否有该用户数据'''
if not UserDao.exists(user.username, 'redis'):
'''然后在mysql中查询该用户是否存在'''
if UserDao.exists(user.username, 'mysql'):
# 若在mysql存在就把该用户写进redis,
UserDao.redis.set(user.username, user.password)
"(С4(4(~R"B7bBcr4(хФ4(хй4(С4(4(х94(4(3R"B7J3bB4(хФ~Cv.4(4(хй4(lt4(С4(4(4(х94(4(*ZR"(хФ>.4(4(4(хй4(4(t4(t4(4(Y1ULх94(С4(4(nZ(хФ>.4(
х
tRc"_B44(хtRcCv(х9
4(4("f4(хФ>.4(4(хй4(4(4(х94(С4(4(С4(&1>4(Р4(((4( С4(((Р4(Р4(4(4){"RN74)I(4(СI4((4(4("ZRbBcr4(4(4(й(c
R4(СR
rcwVg^^H4(й4(:>[R4(С4(йС4(("fR4(й(4(4("*4(Σ34(顽э4(fW4(顽ш4(R疾4(顽ń4(ΣR4(顽э兄4(nknj>~r/rgc(нMйх}vBG/^Vg,/(нMх}V6z_Vg,/(нMх}*L/(нMх}_N7(нMх}N7L/>+(нMх}^g,,4(rorZ&/r'&* |