前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python登录验证模块

python登录验证模块

作者头像
py3study
发布2020-01-10 11:42:48
1.5K0
发布2020-01-10 11:42:48
举报
文章被收录于专栏:python3python3python3
#/usr/bin/env python2.7
#-*- coding:utf-8 -*-
"""
功能:
    登录验证模块
详细说明:
    1.密码文件为passwd
    2.passwd未创建或丢失,会提示:密码文件不存在,建议重新注册!!
    3.未注册用户登录会提示:用户名不存在,请您先进行注册!
    4.已注册用户登录时,忘记密码,尝试3次后密码还不正确则退出验证,等一会儿则可以重新登录
    5.作为装饰器进行登录验证
"""
import json
import hashlib
import os
pwd = os.getcwd()
fileName = os.path.join(pwd,"passwd")

#将明文密码通过md5进行加密,返回一个加密后的md5的值
def calc_md5(passwd):
    md5 = hashlib.md5("haliluya")
    md5.update(passwd)
    ret = md5.hexdigest()
    return ret


#新用户注册模块
def register():
    #判断密码文件passwd是否存在,存在则载入列表,不存在就重新创建一个空字典
    if os.path.exists(fileName):
        #载入用户列表,数据结构为字典,k=userName,v=passwdMd5
        with open("passwd", "r+") as loadsFn:
            userDB = json.loads(loadsFn.read())
    else:
        userDB = {}
    #让用户输入用户名
    userName = raw_input("姓名:")
    #标志位:控制循环跳出
    flag = True
    while flag:
        #用户注册时,需输入两次密码
        passwd1 = raw_input("密码:")
        passwd2 = raw_input("确认密码:")
        #如果两次密码不一致,则不执行下一步,再次输入密码并进行确认
        if not passwd1 == passwd2:
            continue
        else:
            #两次输入密码一致,标志位置为False,下次跳出循环
            flag = False
        #调用calc_md5函数将明文密码转为对应的md5值,用于保存
        passwdMd5 = calc_md5(passwd1)
    #将用户名与密码对应存入字典userDB中
    userDB[userName] = passwdMd5
    #将用户名和密码存入文件
    with open(fileName, "w") as dumpFn:
        dumpFn.write(json.dumps(userDB))


#用户登录验证,装饰器
def login(func):
    def decorater(*args,**kwargs):
        #判断passwd文件是否存在,存在则载入userDB(用户:密码),否则就重新注册新的passwd文件并返回
        if os.path.exists(fileName):
            with open("passwd", "r+") as loadsFn:
                userDB = json.loads(loadsFn.read())
        else:
            print "密码文件不存在,建议重新注册!!"
            register()
            return

        name = raw_input("用户名:")
        #用户名是否存在,存在就继续输入密码,不存在则进行注册
        if name in userDB.keys():
            flag = True
            counter = 0
            #循环输入密码,密码正确,flag=False(下次直接跳出循环)并执行函数,密码错误则允许尝试3次,超过3次验证失败,退出验证
            while flag:
                passwd = raw_input("密码:")
                passwdMd5 = calc_md5(passwd)
                if passwdMd5 == userDB[name]:
                    flag = False
                    func(*args,**kwargs)
                elif counter > 2:
                    print "您已经尝试了3次,请过会儿再试!!"
                    return
                else:
                    counter += 1
        else:
            print "用户名不存在,请您先进行注册!"
            register()
    return decorater

if __name__ == "__main__":
    @login
    def hello():
        print "Hello world!"
    hello()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档