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博客园示例,重点使用装饰器的主要内容,如果未能解决你的问题,请参考以下文章

Go语言之装饰器

Python 使用装饰器快速实现单例模式

python笔记-4(装饰器生成器迭代器)

Python进阶装饰器(Decorator)

Python装饰器示例

python学习笔记之装饰器(语法糖)