当前位置:脚本大全 > > 正文

python如何编写一个用户登录系统(Python实现的登录验证系统完整案例基于搭建的MVC框架)

时间:2021-10-20 08:01:21类别:脚本大全

python如何编写一个用户登录系统

Python实现的登录验证系统完整案例基于搭建的MVC框架

本文实例讲述了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服务程序

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • '''
  • @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层

    用来与用户交互:接收用户的输入和显示结果给用户。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • '''
  • @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层

    实现业务逻辑,控制整个系统的实现流程。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • '''
  • @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)
  •      return 'mysql'
  •    else :
  •      return none
  •   return 'redis'
  • '''
  • # 登录模块
  • 先在redis上验证,验证成功则提示在redis上验证成功
  • 否则到mysql中验证,验证成功则提示在mysql上验证成功
  • 否则提示用户不存在
  • '''
  • def login(user):
  •   print("------------登录界面------------")
  •   # 查询该用户信息是否存在数据库中
  •   wheredb = exists(user)
  •   if wheredb == 'redis':
  •    # 匹配密码是否正确
  •    if userdao.query(user, 'redis') == user.password:
  •      print("[在redis中查询到该用户]登录成功!!!")
  •      return 1
  •    else:
  •      print("[在redis中查询到该用户] 登录失败,用户名或者密码不正确!!!")
  •   elif wheredb == 'mysql':
  •    # 匹配密码是否正确
  •    if userdao.query(user, 'mysql'):
  •      print("[在mysql中查询到该用户] 登录成功!!!")
  •      return 1
  •    else:
  •      print("[在mysql中查询到该用户] 登录失败,用户或者密码不正确!!!")
  •   else:
  •    print("[在mysql中查询不到该用户]登录失败,该用户不存在,请注册后再登录!!!")
  •   return 0
  • '''
  • # 注册模块
  • 先在redis上查询账号是否存在,存在则注册失败
  • 否则到mysql上查询,用户存在则注册失败
  • 否则注册成功,把账号写进mysql,写进redis
  • '''
  • def regist(user):
  •   print("------------注册界面------------")
  •   # 查询该用户信息是否存在数据库中
  •   wheredb = exists(user)
  •   if wheredb :
  •    print("注册失败,该用户已存在!!!")
  •   else:
  •    if userdao.insert(user):
  •      print("注册成功!!!")
  •    else:
  •      print("注册失败!!!")
  • '''
  • # 修改密码模块
  • 先在redis上和mysql上查询,用户存在就在mysql上修改该用户密码,
  • 然后把该用户信息重新写进redis中
  • 在mysql中查询不到该用户,就返回该用户不存在,改密失败
  • '''
  • def changepasswd(user):
  •   print("------------改密界面------------")
  •   # 查询该用户信息是否存在数据库中
  •   wheredb = exists(user)
  •   if wheredb:
  •    user.password = input("请输入新密码:")
  •    if userdao.changepasswd(user):
  •      print("改密成功!!!")
  •    else:
  •      print("改密失败!!!")
  •   else:
  •    print("用户不存在,改密失败!!!")
  • '''
  • # 注销用户模块
  • 先在在redis上和mysql上查询,用户存在就在mysql和redis上删除该用户
  • 在mysql中查询不到该用户,就返回该用户不存在,注销失败
  • '''
  • def deleteuser(user):
  •   print("------------注销界面------------")
  •   # 查询该用户信息是否存在数据库中
  •   if login(user):
  •    if userdao.deleteuser(user):
  •      print("注销成功!!!")
  •      return
  •   print("注销失败!!!")
  • 4、model层

    用来访问数据库,实现业务逻辑与数据库分离,易于维护系统。

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • '''
  • @author ldc
  • '''
  • from utils.dbutil import redisutil, mysqlutil
  • # 用户模型类
  • class user:
  •   def __init__(self,username,password):
  •     self.username = username
  •     self.password = password
  • # userdao
  • # 封装了对user数据的增删改查
  • # dao=database access object 数据库访问对象
  • class userdao:
  •   # 创建数据库对象
  •   redis = redisutil()
  •   mysql = mysqlutil('homework','t_usr')
  •   # 执行数据库查询操作,返回查询结果
  •   @classmethod
  •   def query(cls,user,dbtype):
  •     datadict = {}
  •     datadict["u

    猜您喜欢