模拟博客园登录:
要求:
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(' {}:{},执行了{}函数'.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(' ' + 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('输入为非法字符')
'''不断进取'''