用装饰器做一个登陆功能(进阶):

Posted Qingqiu_Gu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用装饰器做一个登陆功能(进阶):相关的知识,希望对你有一定的参考价值。

 1 dic = {
 2     username:None,
 3     status:False
 4 }
 5 def login(flag):     #  传入 ‘微信‘,‘QQ‘
 6     def wrapper(f):
 7         def inner(*args,**kwargs):
 8             if dic[status] == True:
 9                 ret = f()
10                 return ret
11             else:
12                 i = 0
13                 while i < 3:
14                     username = input(请输入你的%s账号: % (flag)).strip()
15                     password = input(请输入你的%s密码: % (flag)).strip()
16                     with open(login_msg,encoding=utf-8) as f1:
17                         content = eval(f1.readline())   #eval() 将文件中的内容直接取出赋值给content
18                         if username == content[flag][username] and password == content[flag][password]:  #falg 的目的就是接受传入的内容是‘微信‘还是‘QQ‘
19                             print(登陆成功)
20                             dic[username] = username
21                             dic[status] = True   #改变状态
22                             ret = f()
23                             return ret
24                         else:
25                             print(你输入的账号或密码错误,你还有%d次机会,请重新输入... % (2-i))
26                             i += 1
27         return inner
28     return wrapper
29 @login(微信)
30 def taobao_home():
31     print(淘宝首页)
32 @login(微信)
33 def taobao_shop():
34     print(淘宝商城)
35 @login(qq)
36 def jingdong_home():
37     print(京东首页)
38 @login(qq)
39 def jingdong_shop():
40     print(京东商城)
41 
42 choice_list = {          #定义一个choice_list 用数字作key 函数名作值。
43     1:taobao_home,
44     2:taobao_shop,
45     3:jingdong_home,
46     4:jingdong_shop
47 }
48 
49 while True:
50     print(1\t淘宝首页\n2\t淘宝商城\n3\t京东首页\n4\t京东商城)   #循环打印四个内容
51     choice = input(请输入你的选项:).strip()
52     if choice.isdigit():
53         choice = int(choice)
54         if  0 < choice <= len(choice_list):
55             choice_list[choice]()   #  通过选择的数字 执行相应的函数
56         else:
57             print(你输入的不在选项范围内,请重新输入...)
58     else:
59         print(你输入的不是数字,请重新输入...)

 

 

以上是关于用装饰器做一个登陆功能(进阶):的主要内容,如果未能解决你的问题,请参考以下文章

python装饰器使用

~~函数进阶:装饰器~~

装饰器做缓存

装饰器做权限认证

Python 元类与类装饰器

函数进阶篇