设为首页 加入收藏

TOP

编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
2019-07-04 10:15:28 】 浏览:57
Tags:编写 装饰 多个 函数 加上 认证 功能 用户 账号 密码 来源于 文件 要求 登录 成功 一次 后续 无需 输入 户名

小猿圈作业:

  • 编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

  • tip:account文件的格式
  • 1 dadada 123456
    2 da da
    3 da1 da
    4 da2 1234
    5 da3 1111

     

 1 # @Time     :2019/7/2 21:38
 2 
 3 '''
 4 编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
 5 要求登录成功一次,后续的函数都无需再输入用户名和密码
 6 '''
 7 account_status = False #用于判断是否已经通过验证
 8 
 9 def login(func):
10     account_dict = {} #账号密码验证用的,可以换其他方式验证  账号当做key,密码当做value
11     def inner():
12         global account_status
13 
14         if not account_status :
15             with open('account',encoding='utf-8') as f:
16                 account_data = f.read().split('\n')
17                 for item in account_data:
18                     user, pwd= item.split()
19                     account_dict.setdefault(user,pwd)
20 
21             username = input("username>>>: ").strip()
22             # username = 'da'
23             password = input("password>>>: ").strip()
24             # password = 'da'
25             #验证输入的账号是否在account_dict已存在
26             #用.__contains__方法 是为了输入的用户名不存在,然后报 key不存在的错误
27             if account_dict.__contains__(username) and account_dict[username] == password:
28                 account_status = True #修改用户登录状态
29                 print("登陆中~~~".center(50))
30                 func()#执行传入的函数
31             else:
32                 print('账号密码不匹配')
33 
34         else:
35             print('已通过验证'.center(50))
36             func()
37 
38     return inner
39 
40 @login
41 def movies():
42     print('--电影专区--')
43 
44 @login
45 def articles():
46     print('--小说专区--')
47 
48 @login
49 def music():
50     print('--歌曲专区--')
51 
52 movies()
53 articles()
54 music()

 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python 随缘笔记 下一篇python入学代码

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目