模拟博客园登录 基础版
'''用代码模拟博客园系统:
项目分析:
一.首先程序启动,页面显示下面内容供用户选择:
请登录
请注册
进入文章页面
进入评论页面
进入日记页面
进入收藏页面
注销账号
退出整个程序
二.必须实现的功能:
注册功能要求: a. 用户名、密码要记录在文件中。
b. 用户名要求:只能含有字母或者数字不能含有特殊字符并且确保用户名唯一。
c. 密码要求:长度要在6~14个字符之间。 d. 超过三次登录还未成功,则退出整个程序。
登录功能要求: a. 用户输入用户名、密码进行登录验证。
b. 登录成功之后,才可以访问37选项,如果没有登录或者登录不成功时访问37选项
,不允许访问,让其先登录。(装饰器)
入文章页面要求: a. 提示欢迎xx进入文章页面。
b. 此时用户可以选择:直接写入内容,还是导入md文件。
① 如果选择直接写内容:让学生直接写文件名|文件内容…最后创建一个文章。
② 如果选择导入md文件:让用户输入已经准备好的md文件的文件路径(相对路径即可:比如函数的进阶.md)
,然后将此md文件的全部内容写入文章(函数的进阶.text)中。
进入评论页面要求: 提示欢迎xx进入评论页面。
进入日记页面要求: 提示欢迎xx进入日记页面。
进入收藏页面要求: 提示欢迎xx进入收藏页面。
注销账号要求: 不是退出整个程序,而是将已经登录的状态变成未登录状态(访问3~7选项时需要重新登录)。
退出整个程序要求: 就是结束整个程序。
三.选做功能:'''
status_dict = {'username':None,'status':False}
读取文件中已有的用户名和密码
x = {}
with open('register.txt', encoding='utf-8') as f:
for line in f:
x.setdefault(line.strip().split('|')[0], line.strip().split('|')[1])
#print(x)
def logi():
cont = 0
while 1:
name = input('请输入用户名: ')
mima = input('请输入用户密码: ')
if name in x and x[name] == mima :
status_dict['username'] = name
status_dict['status'] = True
print('登陆成功!')
return True
else:
cont += 1
print(f'账号或密码输入错误,还剩{3-cont}次机会')
if cont ==3:
print('登陆失败!')
return False
'''
ss = logi()
print(ss)#测试上面函数执行成功,注意一个大坑TXT中光标停留位置的
'''
def register():
while 1:
a = input('请输入注册的用户名(只能含有字母或者数字不能含有特殊字符): ')
b = input('请输入注册的密码(长度要在6~14个字符之间): ')
if a.isalnum():
with open('register.txt',encoding='utf-8',mode='a') as f1:
if a not in x:
if len(b) >= 6 and len(b) <= 24:
f1.write(f'{a}|{b} \n')
print('注册成功! 系统已为你自动登陆')
status_dict['username'] = a
status_dict['status'] = True
return True
else:
print('密码长度要在6~14个字符之间')
continue
else:
print('用户名已存在')
continue
def warpper(h):
def inner(args,**kwargs):
if status_dict['status']:
ret = h(args,**kwargs)
return ret
else:
if logi():
ret = h(*args, **kwargs)
return ret
return inner
@ warpper
def article():
print(f"欢迎{status_dict['username']}访问文章页面")
print('''
请输入字母选择:
a 直接写入内容
b 导入md文件
''')
p = input('请输入: ')
if p == 'a':
o = input('请输入文件名|文件内容:')
ii = o.strip().split('|')
with open(ii[0],encoding='utf-8',mode='w') as ff:
ff.write(ii[1])
if p == 'b':
u = input('请输入相对文件路径: ')
with open(u,encoding='utf-8') as ff1,
open('函数的进阶.txt',encoding='utf-8',mode='w') as ff2:
yy = ff1.read()
ff2.write(yy)
@warpper
def comment():
print(f"欢迎{status_dict['username']}访问评论页面")
pass
@warpper
def dariy():
print(f"欢迎{status_dict['username']}访问日记页面")
@warpper
def collect():
print(f"欢迎{status_dict['username']}访问收藏页面")
def login_out():
status_dict['status'] = False
print('已注销账号')
def _quit():
print('已退出整个程序')
exit()
dic = {
1: logi,
2: register,
3: article,
4: comment,
5: dariy,
6: collect,
7: login_out,
8: _quit,
}
def run():
while 1:
print('''
1 请登录
2 请注册
3 进入文章页面
4 进入评论页面
5 进入日记页面
6 进入收藏页面
7 注销账号
8 退出整个程序
''')
num = input('请输入选项').strip()
num = int(num)
dicnum
run()