初学函数,将大量的重复代码封装到函数中,写了一个简单的个人博客网站。。。
个人博客开发需求
用户相关功能:
文章相关功能:
下面是详细代码:
"""
用户users = dict()
u1 = {'username': 'admin', 'password': '123', 'nickname': '小刘'}
文章articles = dict('标题': a1)
a1 = {'title': '标题', author: u1, content='内容', readed_count: 0}
"""
#引入依赖的模块
import os, sys, time, pickle
#定义函数
def show_login():
"""展示登录菜单"""
print("\t\t个人博客登录首页")
print("\t\t1.用户登录")
print("\t\t2.用户注册")
print("\t\t3.退出系统")
#用户输入选项
choice = input("请输入您的选项: ")
return login_menu_dict.get(choice)() if choice in login_menu_dict else show_login()
def show_register():
"""展示注册菜单"""
print("\t\t系统用户注册")
print("*" * 30)
print("\t\t请按照提示完成注册")
print("*" * 30)
time.sleep(1)
#用户开始注册
return register()
def show_index():
"""展示首页菜单"""
print("\t\t个人博客首页")
print("\t\t1.查看所有文章")
print("\t\t2.查看个人文章")
print("\t\t3.发表文章")
print("\t\t4.修改登录密码")
print("\t\t5.完善个人资料")
print("\t\t6.回收站")
print("\t\t7.返回登录菜单")
print("\t\t8.退出系统")
#用户输入选项
choice = input("请输入您的选项: ")
return index_menu_dict.get(choice)() if choice in index_menu_dict else show_index()
def look_articles():
"""查看所有文章"""
#循环查看所有文章的标题即可
print("标题\t\t作者")
for title_key in articles.keys():
print(title_key, "\t\t", articles.get(title_key).get('author').get('username'))
title = input("请输入要查看的文章标题(R键返回首页):")
if title.upper() == "R":
return show_index()
else:
#判断用户输入的标题是否存在,并展示文章
if title in articles:
look_articles_detail(title)
else:
print("没有这篇文章")
return show_index()
def look_articles_self():
"""查看自己的所有文章"""
print("标题\t\t作者")
for title_key in articles.keys():
if articles.get(title_key).get("author").get("username") == online.get("username"):
print(title_key, "\t\t", articles.get(title_key).get("author").get("username"))
title = input("请输入要查看的文章标题(R键返回首页):")
if title.upper() == "R":
return show_index()
else:
#判断用户输入的标题是否存在,并展示文章
if title in articles:
print("\t\t1.查看个人文章")
print("\t\t2.修改个人文章")
print("\t\t3.删除个人文章")
choice = input("请输入您的选项:(1/2/3)")
if choice == "1":
#查看个人文章
look_articles_detail(title)
elif choice == "2":
#修改个人文章
new_content = input("请输入您的新内容: ")
if new_content == "R":
print("放弃修改")
look_articles_detail(title)
else:
#将修改后的文章内容更新
articles[title]["content"] = new_content
#返回博客首页
save_data()
return look_articles_self()
elif choice == "3":
#删除个人文章
delete = input("确定删除您的文章吗?(Y/N): ")
if delete.upper() == "Y":
#将文章删除
print("正在删除文章...")
d = articles.pop(title)
#放入回收站
recycle.setdefault(title, d)
time.sleep(1)
print("删除成功")
save_data()
return show_index()
else:
print("放弃删除...")
return look_articles_self()
else:
print("没有这个选项,请重新输入")
return look_articles_self()
else:
print("没有这篇文章")
time.sleep(1)
return look_articles()
def look_articles_detail(title):
"""查看文章详情"""
#获取文章
article = articles.get(title)
#更改阅读次数
rc = article.get("readed_count")
rc += 1
article["readed_count"] = rc
#展示文章
print("文章标题: {}".format(article.get("title")))
print("文章作者: {}".format(article.get("author").get("username")))
print("阅读次数: {}".format(article.get("readed_count")))
print("文章内容: {}".format(article.get("content")))
choice = input("是否进行评论(Y/N)")
if choice.upper() == "Y":
# 判断是否为自己的文章
if articles[title]["author"]["username"] == online.get("username"):
print("不可以评论自己的文章")
return look_articles_self()
else:
comment = input("请输入评论内容: ")
print("评论成功!")
time.sleep(1)
# 将评论内容加到文章末尾
comment = "\n文章评论: " + comment
articles[title]["content"] += comment
#将文章评论保存
save_data()
return show_index()
else:
print("放弃评论...")
input("按任意键返回首页")
return show_index()
def login():
"""登录函数"""
print("\t\t1.账号+密码登录")
print("\t\t2.邮箱+密码登录")
choice = input("请输入您的登录方式(1/2): ")
if choice == "1":
#账号密码登录
username = input("请输入账号(按R键退出): ")
if username.upper() == "R":
return show_login()
password = input("请输入密码(按R键退出): ")
if password.upper() == "R":
return show_login()
#验证账号和密码是否正确
if username in users and password == users.get(username).get("password"):
#登录成功,记录登录用户并跳转到首页
global online
online = users.get(username)
return show_index()
else:
res = input("账号或者密码输入有误,请重新输入: ")
if res.upper() == "R":
return show_login()
else:
time.sleep(1)
return login()
elif choice == "2":
#邮箱密码登录
email = input("请输入您的邮箱: ")
pwd = input("请输入您的密码: ")
#验证邮箱和密码是否正确
if email in users and pwd == users.get(email).get("password"):
#登录成功,记录当前用户
online = users.get(email)
return show_index()
else:
res = input("邮箱或者密码输入有误,请重新输入(按R键回到登录首页): ")
if res.upper() == "R":
return show_login()
else:
time.sleep(1)
return login()
else:
print("没有这个选项,请重新输入")
return login()
def register():
"""注册函数"""
#用户输入注册信息
username = input("请输入注册账号: ")
if username in users:
print("账号已经存在,请使用其他账号注册")
time.sleep(1)
return register()
email = input("请输入您的邮箱:")
if not email.endswith(".com"):
print("邮箱格式不正确,请重新注册")
return register()
password = input("请输入密码: ")
confirm = input("请再次输入密码: ")
if password != confirm:
print("两次密码输入不一致,请重新输入")
time.sleep(1)
return register()
nickname = input("请为您的账号起一个特别的名字吧:")
#创建用户信息,注册
user = {"username": username,"email": email, "password": password, "nickname":nickname}
#注册,录入到系统全局变量中
users[username] = user
users[email] = user
#注册成功,将数据存储
save_data()
#展示登录菜单
return show_login()
def article_publish():
"""发表文章函数"""
#用户输入发表文章的标题、内容
title = input("请输入文章标题: ")
if title in articles:
print("标题已经存在,请使用其他标题")
time.sleep(1)
return article_publish()
#用户输入内容
content = input("请输入文章内容 :")
#创建文章
article = {"title": title, "content": content, "author": online, "readed_count": 0}
#将文章添加到系统中
articles[title] = article
save_data()
print("文章发表中...")
time.sleep(1)
print("文章发表成功...")
#跳转到首页
return show_index()
def change_password():
"""修改登录密码"""
password = input("请输入您的旧密码: ")
if password != online.get("password"):
print("密码输入错误,请重新输入")
return change_password()
new_password = input("请输入您的新密码: ")
if new_password == password:
print("新密码与旧密码一致,请重新输入")
return change_password()
confirm_password = input("请确认您的新密码: ")
if confirm_password != new_password:
print("两次新密码输入不一致,请重新输入")
return change_password()
#修改完成,将新密码保存到系统中
print("密码修改成功,请使用新密码登录")
online["password"] = new_password
save_data()
#返回登录首页
time.sleep(1)
return show_login()
def userinfo_perfect():
"""个人信息完善"""
print("完善一下您的信息吧")
phone = input("请输入您的手机号: ")
if len(phone) != 11:
print("手机号码格式不正确,请重新输入")
return userinfo_perfect()
gender = input("请输入您的性别(男/女): ")
age = int(input("请输入您的年龄: "))
#将完善的信息添加到系统中
online.setdefault("phone",phone)
online.setdefault("gender",gender)
online.setdefault("age", age)
print("信息完善成功...")
for k, v in users.items():
print(k,v)
time.sleep(1)
save_data()
return show_index()
def recycle_bin():
"""回收站"""
global recycle
global articles
#查看回收站
for i,v in recycle.items():
print("回收站内容: ", i,v)
print("\t\t1.恢复删除的文章")
print("\t\t2.清空回收站")
#用户输入选项
if len(recycle) > 0:
choice = input("请输入您的选项(1/2): ")
if choice == "1":
#恢复删除的文章
articles.setdefault(i,v)
print("文章恢复成功!")
recycle.clear()
save_data()
return show_index()
elif choice == "2":
#清空回收站
print("回收站即将清空...")
recycle.clear()
print("回收站内容: ", recycle)
time.sleep(1)
save_data()
return show_index()
else:
print("没有这个选项")
return show_index()
else:
print("回收站为空,即将回到首页")
time.sleep(1)
return show_index()
def exit_system():
"""退出系统"""
for i in range(0, 3):
print("系统将在{}秒后退出".format(3 - i))
time.sleep(1)
sys.exit(1)
def save_data():
"""将数据存储到文件中"""
f = open("./data/1.txt", "wb")
pickle.dump(users, f)
pickle.dump(articles, f)
f.close()
def get_data():
"""从文件中读取数据"""
global users, articles
f1 = open("./data/1.txt", "rb")
users = pickle.load(f1)
articles = pickle.load(f1)
f1.close()
#用户数据
users = dict()
#文章数据
articles = dict()
#回收站数据
recycle = dict()
#创建一个变量,记录在线登录的用户
online = None
#定义登录选项和函数的对应关系
login_menu_dict = {
"1": login,
"2": show_register,
"3": exit_system
}
#定义首页选项和函数的对应关系
index_menu_dict = {
"1": look_articles,
"2": look_articles_self,
"3": article_publish,
"4": change_password,
"5": userinfo_perfect,
"6": recycle_bin,
"7": show_login,
"8": exit_system
}
def engine():
"""引擎"""
#初始化数据
get_data()
#展示登录菜单
show_login()
#启动程序
engine()