python3 模拟博客园登录

'''
作业题目:
模拟博客园登录
作业需求:
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),注销用户是指注销用户的登录状态,使其在访问任何页面时,必须重新登录。
'''
def mk_file(): #判断文件是否存在,不存在则创建空文件
if not os.path.exists(register_file):
f = open(register_file, mode="w", encoding="utf-8")
f.close()

def get_file_content(): #读取文件内容,返回一个字典
mk_file()
with open(register_file, mode="r", encoding="utf-8") as f:
content = f.read().strip()
if content != "":
content = eval(content)
else:
content = {}
return content

def edit_file_content(usr_dic): #修改文件内容
with open(register_file, mode="w", encoding="utf-8") as f:
f.write(str(usr_dic))

def login(): #用户登录
global username
usr_dic = get_file_content()
if username != "": #检查用户是否已登录
if usr_dic.get(username, {}) != {}:
if usr_dic[username]["status"] == "logged":
return
for i in range(3, 0, -1): # 三次机会
while 1:
print("\033[31;0m请先登录\033[0m".center(50, "*"))
name = input("Login Username: ").strip()
if name == "":
print("\033[31;0m用户名不能为空.\033[0m")
continue
pwd = input("Login Password: ").strip()
if pwd == "":
print("\033[31;0m密码不能为空.\033[0m")
continue
if name in usr_dic:
if usr_dic[name]["pwd"] == pwd: #验证通过
usr_dic[name]["status"] = "logged"
username = name
edit_file_content(usr_dic)
print("\033[32;0m恭喜您,用户名%s登录成功.\033[0m" % name)
return
if i == 1: #验证失败
exit("\033[31;0m用户名或密码错误,您的账号已锁住.\033[0m")
else:
print("\033[31;0m用户名或密码错误,您还有%d次机会.\033[0m" % (i-1))
break

def register(): #用户注册
global username
while 1:
name = input("Register Username: ").strip()
pwd = input("Register Password: ").strip()
if name != "" and pwd != "": #用户名和密码的合法性
if len(name) < 3 and len(name) > 30:
print("\033[31;0m用户名长度为3~30.\033[0m")
continue

if len(pwd) < 6 and len(pwd) > 20:
print("\033[31;0m用户密码长度为6~20.\033[0m")
continue

usr_dic = get_file_content()
if name in usr_dic: #检查用户名是否存在
print("\033[31;0m注册失败,用户名%s已存在.\033[0m" % name)
continue
else: #不存在,则添加用户名和密码
usr_dic.setdefault(name, {"pwd": pwd, "status": "logged"})
edit_file_content(usr_dic)
username = name
login()
print("\033[32;0m恭喜您,账号%s注册成功.\033[0m" % name)
return
else:
print("\033[31;0m用户名和密码不能为空.\033[0m")

def write_log(auth_flag): #装饰器函数,也是一个闭包函数,记录日志
def auth(func):
def record_log():
if auth_flag: #需要登录
login()
time_lst = time.strftime("%Y %m %d", time.localtime()).split()
with open(log_file, mode="a", encoding="utf-8") as f: #追加日志
f.write("用户:%s 在%s年%s月%s日 执行了 %s函数\n" % (username, time_lst[0], time_lst[1], time_lst[2], func.__name__))
return func() #调用被装饰函数
return record_log
return auth

@write_log(1) # 这里相当于 xx = write_log(1) 和 article_page = xx(artical_page)
def article_page(): #文章页面
print("\033[32;0m欢迎%s用户访问文章页面.\033[0m".center(50, "*") % username)

@write_log(1)
def diary_page(): #日记页面
print("\033[32;0m欢迎%s用户访问日记页面.\033[0m".center(50, "*") % username)

@write_log(1)
def comment_page(): #评论页面
print("\033[32;0m欢迎%s用户访问评论页面.\033[0m".center(50, "*") % username)

@write_log(1)
def collect_page(): #收藏页面
print("\033[32;0m欢迎%s用户访问收藏页面.\033[0m".center(50, "*") % username)

@write_log(0) #这里相当于 xx = write_log(0) 和 article_page = xx(artical_page)
def logout(): #注销
global username
usr_dic = get_file_content()
usr_dic[username]["status"] = "logout"
edit_file_content(usr_dic)
print("\033[32;0m用户%s已成功注销.\033[0m" % username)
username = ""

import os
import time
menu = ["请登录", "请注册", "文章页面", "日记页面", "评论页面", "收藏页面", "注销", "退出程序"] #菜单列表
register_file = "register" #用户注册文件
log_file = "log" #日志文件
username = "" #用户名,默认为空
print("\033[32;0m欢迎%s来到博客园首页\033[0m".center(50, "*") % username)
while 1:
for k, item in enumerate(menu, 1): #显示菜单
if username == "":
print("%d:%s" % (k, item))
else:
if k <= 2:
continue
print("%d:%s" % (k, item))

user_choice = 1 #定义用户选择的菜单序号默认为1
while 1: #用户选择菜单序号
user_choice = input("请输入菜单序号: ").strip()
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice >=1 and user_choice <= len(menu):
break
else:
print("\033[31;0m输入有误,请重新输入菜单序号!\033[0m")
else:
print("\033[31;0m输入有误,请重新输入菜单序号!\033[0m")

if user_choice == 1: #登录
login()
elif user_choice == 2: #注册
print("\033[31;0m请先注销.\033[0m") if username != "" else register()
elif user_choice == 3: #文章页面
article_page()
elif user_choice == 4: #日记页面
diary_page()
elif user_choice == 5: #评论页面
comment_page()
elif user_choice == 6: #收藏页面
collect_page()
elif user_choice == 7: #注销
logout() if username != "" else print("\033[31;0m您还没有登录,不能注销.\033[0m")
else: #退出程序
exit("\033[32;0m退出程序.\033[0m")

猜你喜欢

转载自www.cnblogs.com/lilyxiaoyy/p/10779669.html