博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有参装饰器实现登录用户文件验证和验证失败锁定
阅读量:4330 次
发布时间:2019-06-06

本文共 2543 字,大约阅读时间需要 8 分钟。

定义有参数装饰器为被装饰函数添加认证的功能:用户信息的来源可以是文件或者ldap,三次验证失败锁定用户。

def input_msg():    '''打印用户要输入的信息,    返回用户名、密码'''    username = input("username: ")    password = input("password: ")    return username, passworddef locked(username):    '''从user_times.db文件中查询用户名,    判断用户名是否已被锁定,    锁定返回False,没锁定返回True'''    flag_l = True    with open("user_times.db",mode="r",encoding="utf8") as file:        for i in file:            if username == i:                flag_l = False        if flag_l:            return flag_l        else:            return flag_lerror_name_dic = [] #存储用户名密码为错误的用户名的列表def instert(username):    '''将用户名密码初错误的用户名插入列表,    并判该用户名在列表中是否大于等于3次,    大于等于将该用户名追加入user_times.db'''    error_name_dic.append(username)    count = 0    for i in error_name_dic:        if i == username:            count += 1        if count >= 3:            with open("user_times.db", mode="a", encoding="utf8") as file:                file.write("\n")                file.write(username)def login(username, password):    '''从user.db中判断输入用户名、    密码是够正确,正确返回True,    不正确返回False'''    flag = False    error_name = ""    with open("user.db", mode="r", encoding="utf8") as file:        for i in file:            i = eval(i)            if username == i["username"] and password == str(i["password"]):                flag = True            if username == i["username"] and password != str(i["password"]):                error_name = username        if flag:            return flag, error_name        else:            return flag, error_namedef auth_out(auth_type):    '''带参数的装饰器,返回auth'''    def auth(func):        '''@auth 等于 index = auth(index) ,返回warpper'''        def warpper(*args, **kwargs):            '''index实现用户认证'''            if auth_type == "file":                while True:                    username,password = input_msg()                    flag_l = locked(username)                    if flag_l:                        flag, error_name = login(username, password)                        if flag:                            func(*args, **kwargs)                            return func                        else:                            instert(error_name)                            print("login error...")                    else:                        print("%s had been locked." % username)            elif auth_type == "ldap":                print("We don't have ldap.")        return warpper    return auth@auth_out(auth_type = "file")def index():    print("Welcome,this is index page.")index()

转载于:https://www.cnblogs.com/sunqim16/p/6691298.html

你可能感兴趣的文章
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-4.在线教育后台数据库设计...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-3.热部署在Eclipse和IDE里面的使用...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-3.在线教育站点需求分析和架构设计...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-4.后端项目分层分包及资源文件处理...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_3-5.PageHelper分页插件使用
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-6.微信扫码登录回调本地域名映射工具Ngrock...
查看>>
小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-8.用户模块开发之保存微信用户信息...
查看>>
Linux下Nginx安装
查看>>
LVM扩容之xfs文件系统
查看>>
Hbase记录-client访问zookeeper大量断开以及参数调优分析(转载)
查看>>
代码片段收集
查看>>
vue-cli3创建项目时报错
查看>>
输入1-53周,输出1-53周的开始时间和结束时间
查看>>
实验二
查看>>
shell——按指定列排序
查看>>
crash 收集
查看>>
507 LOJ 「LibreOJ NOI Round #1」接竹竿
查看>>
UI基础--烟花动画
查看>>
2018. 2.4 Java中集合嵌套集合的练习
查看>>