Python模拟用户验证的程序

写在前面的

每一个系统,第一步操作基本都是先用户登录。登录后,在用户使用相应功能时,都需要先验证用户权限,再显示相应权限范围内的信息。这样才能保证用户不会越权使用系统。

用户登录验证的方式很多,但想起来简单,做起来也不难,但做好似乎又不是那么容易。

这里就以一个简单的代码结构模拟用户登录及用户验证的结构。

1.需求描述

  • 用户可能通过用户名密码进行系统登录
    • 当用户名不存在时提示 “用户不存在”
    • 用户未登录时:
      • 当用户密码不匹配时提示 “用户名密码不正确”
      • 当用户密码为空是提示 “用户密码不能为空”
      • 当用户名密码匹配时提示 “用户登录成功”
  • 查询用户信息,用户只能查询自己的信息
    • 登录系统用户与查询用户的用户名不相同时,提示 “您无权查询此用户信息”
    • 登录系统用户与查询用户的用户名不相同时, 显示用户信息

2.设计描述

2.1 用户信息

使用一个字典模拟数据库存放的用户信息,用户信息包含:

字段名 格式 说明
用户名 字符串
密码 加密后的字符串 Md5加密
是否已登录 bool 0-未登录 1-已登录
登录时间 datetime

使用文件来存放用户数据字典:
初始化用户,使用一个函数将创建4个用户账号,并将账号存放在字典中返回。
创建一个用户类处理文件读写,用户创建,数据初始化操作

class User:    
    # staticmethod:user_list = dict()
    user_list = {
   
   }
    user_file = r".\user1.bin"

    def __init__(self):
        self.user_list = self.InitUserInfo()

    # 写数据到用户数据文件
    def OutToFile(self, oUsers=None):
        if oUsers == None:
            oUsers = self.InitUserInfo()
        with open(self.user_file, 'wb') as f:
            f.write(json.dumps(oUsers).encode("utf-8"))
            f.flush()
            f.close()

    # 从数据文件读数据
    def ReadFromFile(self):
        with open(self.user_file, 'rb') as f:
            data = f.read()
            f.close()
        return json.loads(data)
        
        
    # 创建用户
    def BuildUser(self, *args):
        '''
            args[0]: UserName
            args[1]: Password
        '''
        oUserInfo = {
   
   
            'UserName': args[0],
            'PassWord': hashlib.md5(args[1].encode('utf-8')).hexdigest(),
            'IsLogin': 0,
            'LastTime': datetime.today().strftime("%Y-%m-%d %H:%I:%S")
            }
        return oUserInfo
            
    # 初始化用户数据
    def InitUserInfo(self):
        user_dict = dict()
        user_dict["A01"] =self.BuildUser("U01","123")
        user_dict["A02"] =self.BuildUser("U02","123")
        user_dict["A03"] =self.BuildUser("U03","123")
        user_dict["A04"] =self.BuildUser("U04","123")
        return user_dict

2.2 验证用户

创建两个闭包函数

一个用来在验证用户信息时,通过装饰器模式来验证用户状态。函数将需要最多两个参数,第一个参数为用户名,第二个参数为密码。如果仅验证用户状态,则只需要传入第一个用户名即可。

一个用来实现用户登出操作,通过装饰器模式来更新用户状态为登出。

  • 这里通过使用一个列表参数 *args 来实现不定数量参数。
  • 通过hashlib库的md5来加密码密码
  • 在只有验证通过时才会执行装饰器对应的函数

# 验证用户状态
# 01 - 用户不存在
# 02 - 用户密码不能为空
# 03 - 用户名密码不正确!
# 00 - 用户登录成功
def ValidUser(func):
    def UserStatus(*args):
        
        user_name = pass_word = None
        if len(args) >= 1:
            user_name = args[0]
        if len(args) >= 2:
            pass_word = hashlib.md5(args[1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值