python博客园示例,重点使用装饰器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python博客园示例,重点使用装饰器相关的知识,希望对你有一定的参考价值。
# -*- coding:utf-8 -*- import time login_state = False user_dict = {'username': None} def register(): # 注册函数 while True: username = input("请输入注册账号:").strip() password = input("请输入注册密码:").strip() with open("register", encoding="UTF-8")as reg: for i in reg: list_reg = i.strip().split(',') if username == list_reg[0]: print("用户名已经存在,请重新输入") break else: with open("register", encoding="UTF-8", mode="a")as ligo: ligo.write('\n{},{}'.format(username, password)) print("注册成功") return True def login(): # 登陆函数 global login_state global user_dict i = 0 # 计数器 while i < 3: # 超过3次后,登陆失败 username = input("请输入您的账号:").strip() password = input("请输入您的密码:").strip() # 去除空格及换号符 with open('register', encoding='UTF-8')as f1: for line in f1: # 循环读取注册文件中的内容 line_list = line.strip().split(',') if username == line_list[0] and password == line_list[1]: print("*******登陆成功*******") login_state = True user_dict = line_list[0] return True else: print("账户或密码输入错误") i += 1 def log(e): def loge(): log_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) with open("log", encoding="UTF-8", mode="a") as logg: logg.write('\n{},{}登陆了,执行了{}函数'.format(log_time, user_dict, e.__name__)) e() return loge def jian_ce(f): # 认证函数,检测用户是否登陆 def inner(): global login_state if login_state == False: print("您尚未登陆,请先登陆后在执行程序") login() else: f() return inner def logoff(): # 注销函数 global login_state if login_state == True: login_state = False print("注销成功") return login_state else: print("您尚未登陆,不需要注销") @jian_ce # 语法糖,装饰器 @log def wen_zhang(): print("这是文章页面") @jian_ce # 语法糖,装饰器 @log def ri_ji(): print("这是日记页面") @jian_ce # 语法糖,装饰器 @log def ping_lun(): print("这是评论页面") @jian_ce # 语法糖,装饰器 @log def shou_cang(): print("这是收藏页面") xu_dict = { # 定义了一个字典,存放序列号对应函数 1: login, 2: register, 3: wen_zhang, 4: ri_ji, 5: ping_lun, 6: shou_cang, 7: logoff } while True: print('''-------欢迎来到博客园------- 1:请登陆 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 8:退出程序 ''') xu_hao = input("请输入序列号:").strip() if xu_hao.isdigit(): xu_hao = int(xu_hao) if xu_hao > 0 and xu_hao <= len(xu_dict): xu_dict[xu_hao]() elif xu_hao == 8: break print("再见!退出程序成功") else: print("你输入的序号不存在") else: print("您输入的序列号存在非法字符")
以上是关于python博客园示例,重点使用装饰器的主要内容,如果未能解决你的问题,请参考以下文章