python博客园,模拟

模拟博客园登录:

要求:

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

login_status = {
    'name': None,
    'status': False
}
file_None = os.path.exists('test.txt')   # 判断用户文件是否存在
if file_None:
    pass
else:
    with open('test.txt', encoding='utf-8', mode='w') as file_Create:
        pass

with open('test.txt', encoding='utf-8', mode='r+') as test:
    data = test.read()
    if len(data) == 0:  # 判断文件是否为空
        test.write('用户名 密码')


def login(f):  # 登录加日志
    def inner(*args, **kwargs):
        num = 0
        while num < 3:
            if login_status['status']:  # 如果status=True则无需验证
                with open('log.file', encoding='utf-8', mode='a') as log_file:
                    ret = f(*args, **kwargs)
                    log_file.write('\n{}:{},执行了{}函数'.format(login_status['name'], time.strftime("%Y-%m-%d"), f))
                    return ret  # 用来返回一个值退出
            else:
                print('清先登录')
                username = input('请输入用户名')
                password = input('请输入密码')
                with open('test.txt', encoding='utf-8') as f1:
                    for i in f1:
                        new_list = i.strip().split()  # 重文件中取出值以逗号分割 转换成list
                        if username == new_list[0] and password == new_list[1]:  # 判断用户以及密码
                            login_status['name'] = username
                            login_status['status'] = True  # 为True时由上调用函数
                            break
                    else:
                        num += 1
                        print('输入用户名或密码错误还有{}次机会'.format(3 - num))
                        continue
        else:
            print('输入次数太多了请先注册。。。')

    return inner


def register():  # 注册
    flag = True
    while flag:
        register_name = input('输入你注册的用户名')
        register_pass = input('输入你注册的密码')
        with open('test.txt', encoding='utf-8', mode='r') as file1:
            for i in file1:
                new_list2 = i.strip().split()
                if register_name == new_list2[0]:  # 判断注册的用户是否存在
                    print('用户已存在')
                    break  # 如果存在退出
            else:
                with open('test.txt', encoding='utf-8', mode='a') as file2:
                    file2.write('\n' + register_name + ' ')  # 不存在则添加
                    file2.write(register_pass)
                    file2.close()
                    print('注册成功')
                    break


@login
def login_success():
    print('欢迎来到登录界面')


@login
def article():
    print('欢迎来到文章界面')


@login
def diary():
    print('欢迎来到日记界面')


@login
def comment():
    print('欢迎来到评论界面')


@login
def Collection():
    print('欢迎来到收藏界面')


def Cancellation():
    print('成功注销')
    login_status['name'] = None
    login_status['status'] = False


def byebye():
    print('成功退出')
    return exit()


dic = {1: login_success,
       2: register,
       3: article,
       4: diary,
       5: comment,
       6: Collection,
       7: Cancellation,
       8: byebye}  # 把函数名定义成字典方便后面调用

while True:
    str = '''##########欢迎来到博客园首页###########
         1: {}
         2: {}
         3: {}
         4: {}
         5: {}
         6: {}
         7: {}
         8: {}
             '''.format('请登录', '请注册', '文章页面', '日记页面', '评论页面', '收藏页面', '注销', '退出程序')
    print(str)
    Choice = input('输入你的选择')
    if Choice == '1':
        pass
    if Choice.isdigit():
        if '0' < Choice < '9':
            dic[int(Choice)]()
        else:
            print('输入超出范围,重新输入')
    else:
        print('输入为非法字符')

'''不断进取'''