'''
作业:模拟博客园登录:
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 time
struct_time = time.localtime()
login_status = {
'username': None,
'password':None,
'status': False,
}
register_status = {'status': False} # 定义注册的初始状态
# 定义装饰器
def login(f):
def inner(*args, **kwargs):
if login_status['status']:
ret = f(*args, **kwargs)
return ret
else:
count = 0
while count < 3:
name = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
# 通过读文件的方式获取用户名和密码,支持多个账号和密码。
f1 = open('多账号管理', encoding='utf-8', mode='r')
for i in f1:
content = i.strip().split('|')
if name == content[0].strip() and password == content[1].strip():
print('恭喜你,登录成功!')
login_status['username'] = content[0].strip()
login_status['password'] = content[1].strip()
login_status['status'] = True
ret = f(*args, **kwargs)
return ret
else:
print('输入的账号或者密码有误,请重新输入!')
count = count + 1
n = str(3 - count)
print('您有' + n + '次重试机会')
break
if count >= 3:
print('抱歉,您已经没有登录机会!')
quit()
f1.close()
return inner
@login
def article():
f1 = open('log', encoding='utf-8', mode='a')
f1.write(login_status['username'])
f1.write(':')
f1.write(time.strftime("%Y-%m-%d", struct_time))
f1.write('执行了article函数,访问页面内容时,页面内容为:')
f1.write('欢迎访问文章页面\n')
f1.close()
print('欢迎访问文章页面')
@login
def dariy():
f1 = open('log', encoding='utf-8', mode='a')
f1.write(login_status['username'])
f1.write(':')
f1.write(time.strftime("%Y-%m-%d", struct_time))
f1.write('执行了dariy函数,访问页面内容时,页面内容为:')
f1.write('欢迎访问日记页面\n')
f1.close()
print('欢迎访问日记页面')
@login
def comment():
f1 = open('log', encoding='utf-8', mode='a')
f1.write(login_status['username'])
f1.write(':')
f1.write(time.strftime("%Y-%m-%d", struct_time))
f1.write('执行了comment函数,访问页面内容时,页面内容为:')
f1.write('欢迎访问评论页面\n')
f1.close()
print('欢迎访问评论页面')
@login
def collection():
f1 = open('log', encoding='utf-8', mode='a')
f1.write(login_status['username'])
f1.write(':')
f1.write(time.strftime("%Y-%m-%d", struct_time))
f1.write('执行了collection函数,访问页面内容时,页面内容为:')
f1.write('欢迎访问收藏页面\n')
f1.close()
print('欢迎访问收藏页面')
def login(): # 定义登录函数
if login_status['status'] == True:
print('系统已经登录,无需在此登录')
else:
count = 0
while count < 3 and login_status['status'] == False:
name = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
# 通过读文件的方式获取用户名和密码,支持多个账号和密码。
f1 = open('多账号管理', encoding='utf-8', mode='r')
for i in f1:
content = i.strip().split('|')
if name == content[0].strip() and password == content[1].strip():
print('恭喜你,登录成功!')
login_status['username'] = content[0].strip()
login_status['password'] = content[1].strip()
login_status['status'] = True
break
else:
print('输入的账号或者密码有误,请重新输入!')
count = count + 1
n = str(3 - count)
print('您有' + n + '次重试机会')
break
if count >= 3:
print('抱歉,您已经没有登录机会!')
quit()
f1.close()
def register(): # 定义注册函数
# register_name = input('请输入注册用户名:').strip()
# register_password = input('请输入注册密码:').strip()
# f2 = open('register', encoding='utf-8', mode='a')
# f2.write('\t'+register_name +'|'+ register_password+'\n')
# f2.close()
# login_status['username'] = register_name
# login_status['status'] = True
# #
register_status['status'] = False # 重置注册函的初始状态
register_name = input('请输入注册用户名:').strip()
register_password = input('请输入注册密码:').strip()
f2 = open('register', encoding='utf-8', mode='r+')
for line in f2: # 判断用户名是否已经存在
l1 = line.strip().split('|') # 分割成为列表
if register_name == l1[0]:
print('用户名已经存在,请重新注册')
register_status['status'] = True
break
if register_status['status'] == False: # 状态为False说明用户名在register文件中未找到。
f2.write('\t'+register_name +'|'+ register_password+'\n')
login_status['username'] = register_name
login_status['status'] = True
print('恭喜您,已经注册成功,并且已登录成功,请访问页面')
f2.close()
def logout(): # 定义注销函数
print('系统已退出,如果访问系统,需要重新登录系统')
login_status['status'] = False
def close(): # 定义关闭函数
print('程序已关闭,如需使用请重新启动程序')
quit()
# 定义字典,来存储各个函数。
dic = {
'1': login,
'2': register,
'3': article,
'4': dariy,
'5': comment,
'6':collection,
'7':logout,
'8':close
}
# 定义访问页面
while 1:
print("""欢迎来到博客园首页\n3:文章页面\n4:日记页面\n5:评论页面\n6:收藏页面\n""")
num = input("请输入输入1-8:").strip()
if num.isdigit(): # 判断输入的信息是否只有数字输入
dic[num]()
else:
print('您输入的为非数字,请输入数字')