博客系统
前言
模拟简单的博客
1.账号注册,登陆验证
2.写文章,包含【标题,作者,时间,内容】
3.查询文章,列出所有文章及时间
4.可查看其中一篇文章
5.删除文章
6.修改文章
7.退出系统
全部代码如下
import json
import os
import sys
from datetime import datetime
class User:
def __init__(self, name, pwd) -> None:
self.name = name
self.pwd = pwd
@property
def pwd(self):
return self._pwd
@pwd.setter
def pwd(self, value):
self._pwd = value
if len(value) < 6:
val = input("用户密码过于简单,再次输入?")
self.pwd = val
else:
re_pwd = input("再次输入用户密码?")
if re_pwd == value:
self._pwd = value
# 将对象返回 dict
def show(self):
return {'name': self.name, 'pwd': self.pwd}
class UserManager:
# 用户配置表 路径
user_path = 'user.json'
# 当前登录的用户
cur_user = None
# 唯一实例
instance = None
def __new__(cls):
if cls.instance == None:
cls.instance = super().__new__(cls)
return cls.instance
# 读取用户配置表
def read_user_json(self):
if os.path.exists(self.user_path):
# 用户配置文件存在
with open(self.user_path, encoding='utf-8') as f_r:
return json.load(f_r)
else:
# 用户配置文件不存在
user_j = {"users": []}
with open(self.user_path, 'w', encoding='utf-8') as f_w:
json.dump(user_j, f_w)
return user_j
# 写入用户配置表
def write_user_json(self, user):
# 读取所有的用户
all_user = self.read_user_json()
all_user['users'].append(user.show())
# 写出去
with open(self.user_path, 'w', encoding='utf-8') as f_w:
json.dump(all_user, f_w)
print("更新成功!!")
# 查找用户
def find_user_json(self, user):
# 读取所有的用户
all_user = self.read_user_json()
# 遍历查找 是否存在用户
for i in all_user['users']:
if i['name'] == user.name:
return [True, i]
else:
return [False]
# 注册
def register(self):
print("正在注册".center(50, '*'))
name = input("请输入注册的用户名?")
pwd = input(f'请输入{name}的密码?')
# 创建新用户
u = User(name, pwd)
if self.find_user_json(u)[0]:
print("用户已经存在!,注册失败!")
return False
else:
print("注册中,请稍后!")
self.write_user_json(u)
print("注册成功!")
ArticleManager().create_default_article(name)
return True
# 登录
def login(self):
print("正在登录".center(50, '*'))
name = input("请输入登录的用户名?")
pwd = input(f'请输入{name}的密码?')
# 创建新用户
u = User(name, pwd)
f_user = self.find_user_json(u)
if f_user[0]:
print("用户存在!判断密码")
if f_user[1]['pwd'] == pwd:
print("登录成功!")
UserManager.cur_user = name
return True
else:
return False
else:
print("登录失败")
return False
class Article:
def __init__(self, title, content, author) -> None:
self.title = title # 文章标题
self.content = content # 文章内容
self.time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") # 时间
self.author = author # 作者
def show(self):
return {'title': self.title, 'time': self.time, "author": self.author, "content": self.content}
class ArticleManager:
# 文章的路径
article_path = 'article'
# 静态实例
instance = None
def __new__(cls):
if cls.instance == None:
cls.instance = super().__new__(cls)
return cls.instance
def __init__(self) -> None:
# 创建目录文件夹
if not os.path.exists(self.article_path):
os.mkdir(self.article_path)
# 创建默认
def create_default_article(self, name):
# 用于创建默认文章表
art_json_path = os.path.join(self.article_path, name + '.json')
with open(art_json_path, 'w', encoding='utf-8') as f_r:
temp = {'articles': [Article('初始化默认标题', '初始化默认内容', name).show()]}
json.dump(temp, f_r, ensure_ascii=False)
print("默认文章表创建完成!")
# 读取用户文章
def read_article_json(self):
self.art_json_path = os.path.join(self.article_path, UserManager.cur_user + '.json')
with open(self.art_json_path, encoding='utf-8') as f_r:
return json.load(f_r)
# 写入用户文章
def write_article_json(self, all_article):
self.art_json_path = os.path.join(self.article_path, UserManager.cur_user + '.json')
with open(self.art_json_path, 'w', encoding='utf-8') as f_w:
json.dump(all_article, f_w)
print("更新文成功!")
# 写文章
def write_article(self):
print("写一篇文章".center(50, '*'))
title = input('请输入标题?')
content = input('请输入内容?')
# 文章对象
art = Article(title, content, UserManager.cur_user)
# 读取所有文章
all_article = self.read_article_json()
# 追加文章
all_article['articles'].append(art.show())
# 写文章
self.write_article_json(all_article)
print('发表文章成功!')
print("写一篇文章".center(50, '*'))
# 查所有
def find_all(self):
print("查找所有文章".center(50, '*'))
all_article = self.read_article_json()
for i in range(len(all_article['articles'])):
title = all_article['articles'][i]['title']
if len(title) > 8:
title = title[:7] + '...'
else:
title = title.ljust(10, ' ')
print(i + 1, title, all_article['articles'][i]['time'])
print("查找所有文章".center(50, '*'))
return all_article
# 查一篇
def find_one(self):
all_article = self.find_all()
print("查找一篇文章".center(50, '*'))
index = int(input('请输入您要查看的序号?'))
if 0 <= index <= len(all_article['articles']):
print(all_article['articles'][index - 1])
else:
print("序号错误!")
print("查找一篇文章".center(50, '*'))
# 编辑一篇
def edit_article(self):
all_article = self.find_all()
print("编辑一篇文章".center(50, '*'))
index = int(input('请输入您要编辑的序号?'))
if 0 <= index <= len(all_article['articles']):
title = input('请输入新的标题?')
content = input('请输入新的内容?')
# 文章对象
art = Article(title, content, UserManager.cur_user)
# 更改文章
all_article['articles'][index - 1] = art.show()
# 写文章
self.write_article_json(all_article)
print('修改文章成功!')
else:
print("序号错误!")
print("编辑一篇文章".center(50, '*'))
# 删除一篇
def delete_article(self):
all_article = self.find_all()
print("删除一篇文章".center(50, '*'))
index = int(input('请输入您要编辑的序号?'))
if 0 <= index <= len(all_article['articles']):
# 删除文章
all_article['articles'].pop(index - 1)
# 写文章
self.write_article_json(all_article)
print('删除文章成功!')
else:
print("序号错误!")
print("删除一篇文章".center(50, '*'))
def main():
print("欢迎来到XXX皇家豪华博客系统".center(50, '*'))
while True:
select_a = input("1注册 2登录 3退出")
if select_a == '1':
UserManager().register()
elif select_a == '2':
if UserManager().login():
while True:
select_b = input("1写文章 2读取所有 3读取一篇 4编辑一篇 5删除一篇 6登出")
if select_b == '1':
ArticleManager().write_article()
elif select_b == '2':
ArticleManager().find_all()
elif select_b == '3':
ArticleManager().find_one()
elif select_b == '4':
ArticleManager().edit_article()
elif select_b == '5':
ArticleManager().delete_article()
else:
break
else:
sys.exit()
if __name__ == '__main__':
main()