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("您輸入的序列號存在非法字符")
相關文章
相關標籤/搜索