模拟登录:
要求:
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('输入为非法字符')
'''不断进取'''
努力到无能为力,拼搏到感动自己。