博客园需求,利用装饰器添加功能

项目需求:

1、用户输入选项,3~6选项必须在用户登录成功之后,才能访问成功。
2、用户选择登录,用户名密码从register文件中读取验证,三次机会,没成功则结束整个程序运行,成功之后,可以选择访问3~6项,访问页面之前,必须要在log文件中打印日志,日志格式为-->用户:xx 在xx年xx月xx日 执行了 %s函数,访问页面时,页面内容为:欢迎xx用户 访问评论(文章,日记,收藏)页面
3、如果用户没有注册,则可以选择注册,注册成功之后,可以自动完成登录,然后进入首页选择。
4、注销用户是指注销用户的登录状态,使其在访问任何页面时,必须重新登录。

5、退出程序为结束整个程序运行。

 

  1 def decorator(func):
  2     '''
  3     增加相关页面的功能
  4     :param func: 相关页面函数
  5     :return:
  6     '''
  7     menu_list = [3,4,5,6]
  8     def inner(*args,**kwargs):
  9         for i in menu_list:
 10             if user_choose == i and user_list == []:
 11                 info = login()
 12                 user_list.append(info)
 13                 log_info = '%s在%s执行了%s函数'%(info,time,func.__name__)
 14                 logfile(log_info)
 15                 ret = func(*args,**kwargs)
 16                 if info == '未知账户':
 17                     print('%s不允许访问,可以选择注册菜单进行注册!'%info)
 18                 else:
 19                     print('欢迎%s用户访问%s' % (info, ret))
 20                 return ret
 21             elif user_choose == i and user_list != []:
 22                 log_info = '%s在%s执行了%s函数' % (user_list[0], time, func.__name__)
 23                 logfile(log_info)
 24                 ret = func(*args, **kwargs)
 25                 print('欢迎%s用户访问%s' % (user_list[0], ret))
 26                 return ret
 27 
 28     return inner
 29 def exit_program():
 30     '''
 31     退出程序
 32     :return:
 33     '''
 34     print('再见!')
 35     exit()
 36     return
 37 def cancellation():
 38 
 39     '''
 40     注销
 41     :return:
 42     '''
 43     user = user_list[0]
 44     print('已经注销“%s”账户'%user)
 45     user_list.clear()
 46     return
 47 
 48 @decorator
 49 def collection_page():
 50 
 51     '''
 52     收藏页面
 53     :return:
 54     '''
 55     return ' 收藏页面'
 56 @decorator
 57 def comment_page():
 58 
 59     '''
 60     评论页面
 61     :return:
 62     '''
 63     return '评论页面'
 64 @decorator
 65 def diary_page():
 66 
 67     '''
 68     日记页面
 69     :return:
 70     '''
 71     return '日记页面'
 72 @decorator
 73 def article_page():
 74 
 75     '''
 76     文章页面
 77     :return:
 78     '''
 79     return '文章页面'
 80 def register():
 81     '''
 82     用户注册功能函数
 83     :return: 返回注册后的
 84     '''
 85     while True:
 86         username = input('请输入注册的账户:')
 87         userpasswd1 = input('请输入注册的密码:')
 88         userpasswd2 = input('请再次输入注册的密码:')
 89         if username == str(username):
 90             if userpasswd2 == userpasswd1:
 91                 with open('register.txt',mode='a',encoding='utf-8') as f:
 92                     f.write('%s|%s|%d\n'%(username,userpasswd2,3))
 93                 user_list.append(username)
 94                 print('注册成功!可以直接登录相关页面!')
 95                 return
 96             else:
 97                 print('两次密码不同,请重新输入!')
 98                 continue
 99         else:
100             print('用户名密码不符合要求,账号不能是数字!')
101             continue
102 
103 def login():
104     '''
105     用户登录功能函数
106     :return: 返回登录的账户
107     '''
108     while True:
109         username = input('请输入登录账户:')
110         userpasswd = input('请输入登录密码:')
111         if username in user_dic and user_dic[username][1] == 0:
112             print('账户已经锁定!退出程序')
113             exit()
114         elif username in user_dic and userpasswd != user_dic[username][0]:
115             user_dic[username][1] -= 1
116             print('账户密码无效,还有%s次机会'%user_dic[username][1])
117             continue
118         elif username in user_dic and userpasswd == user_dic[username][0]:
119             user_dic[username][1] = 3
120             user_list.append(username)
121             print('登录成功!')
122             return username
123         else:
124             print('无效账号密码!')
125             return '未知账户'
126 
127 
128 def user_dict():
129     '''
130     账户文件重新写入字典,用于日后认证
131     :return:
132     '''
133     with open('register.txt',mode='r',encoding='utf-8') as reg:
134         for i in reg:
135             user_info = i.strip('\n').split('|')
136             user_info[2]=int(user_info[2])
137             user_dic[user_info[0]] = [user_info[1],user_info[2]]
138 
139 def logfile(log):
140     '''
141     用于记录用户账户和调用函数的日志
142     :param log:
143     :return:
144     '''
145     with open('log.txt',mode='a',encoding='utf-8') as f:
146         f.write(log+'\n')
147 
148 def homepage():
149     '''
150     主页显示
151     :return:
152     '''
153     print('欢迎来到博客园首页')
154     for i in menu:
155         print('%d:%s' % (i, menu[i][0]))
156 
157 menu = {1:['请登录',login],
158         2:['请注册',register],
159         3:['文章页面',article_page],
160         4:['日记页面',diary_page],
161         5:['评论页面',comment_page],
162         6:['收藏页面',collection_page],
163        7:['注销',cancellation],
164        8:['退出程序',exit_program]
165         }
166 time = time.strftime('%y年%m月%d日 %H:%M:%S')
167 user_list = []
168 user_dic = {}
169 user_dict()
170 print('欢迎来到博客园首页')
171 for i in menu:
172     print('%d:%s' % (i, menu[i][0]))
173 while True:
174     user_choose = input('请选择页面ID:')
175     if user_choose.isdecimal():
176         user_choose = int(user_choose)
177         if user_choose in menu:
178             menu[user_choose][1]()
179 
180     else:
181         print('输入的不是数字,请输入数字ID')
View Code

 

posted @ 2020-08-31 17:42  伟仔技术博客  阅读(139)  评论(0)    收藏  举报