要求:

项目分析:一.首先程序启动,页面显示下面内容供用户选择:

1.请登录2.请注册3.进入文章页面4.进入评论页面5.进入日记页面6.进入收藏页面7.注销账号8.退出整个程序

二.必须实现的功能:

1.注册功能要求:a.用户名、密码要记录在文件中。b.用户名要求:只能含有字母或者数字不能含有特殊字符并且确保用户名唯一。c.密码要求:长度要在6~14个字符之间。d.超过三次登录还未成功,则退出整个程序。

2.登录功能要求:a.用户输入用户名、密码进行登录验证。b.登录成功之后,才可以访问3 ~~ 7选项,如果没有登录或者登录不成功时访问3 ~~7选项,不允许访问,让其先登录。(装饰器)

3.进入文章页面要求:a.提示欢迎xx进入文章页面。b.此时用户可以选择:直接写入内容,还是导入md文件。①如果选择直接写内容:让学生直接写文件名|文件内容......最后创建一个文章。

②如果选择导入md文件:让用户输入已经准备好的md文件的文件路径(相对路径即可:比如函数的进阶.md),然后将此md文件的全部内容写入文章(函数的进阶.text)中。

4.进入评论页面要求:提示欢迎xx进入评论页面。

5.进入日记页面要求:提示欢迎xx进入日记页面。6.进入收藏页面要求:提示欢迎xx进入收藏页面。

7.注销账号要求:不是退出整个程序,而是将已经登录的状态变成未登录状态(访问3~7选项时需要重新登录)。

8.退出整个程序要求:就是结束整个程序。

三.选做功能:

1.评论页面要求:a.提示欢迎xx进入评论页面。b.让用户选择要评论的文章。这个需要借助于os模块实现此功能。将所有的文章文件单独放置在一个目录中,利用os模块listdir功能,可以将一个目录下所有的文件名以字符串的形式存在一个列表中并返回。例如:

代码:import osprint(os.listdir(r'D:\teaching_show\article'))


import os# 登录状态
status_dic = {'username': None,'status': False
}
flag = True# 用户名,密码 以字典形式打开
def user_pwd():with open("user", encoding="utf-8") as f:dic = {}for i in f:li = i.strip().split("|")dic[li[0].strip()] = li[1]return dic# 登录函数
def login():u_p = user_pwd()count = 0while count < 3:username = input("请输入姓名: ").strip()password = input("请输入密码: ").strip()if username in u_p and password == u_p[username]:status_dic["username"] = usernamestatus_dic['status'] = True         # 状态改为Trueprint("登陆成功")return Trueelse:print("账号或密码错误,请重新登录")count += 1# 注册函数
def register():while 1:dict1 = user_pwd()username = input("请输入新账号: ").strip()password = input("请输新入密码: ").strip()if username in dict1:                # 判断用户是否在文件中存在print("用户名已存在,请重新输入")continueelif not username.isalnum():        # 判断用户是否是字母或数字组成print("账号含有非法字符,请重新输入")continueelif 5 < len(password) < 15:         # 限制密码在6-14位之间with open("user", encoding="utf-8", mode="a") as f1:f1.write(username+"|"+password+"\n")print("恭喜!注册成功")return Trueelse:print("密码不合规范,请重新输入")# 装饰器
def auth(f):            # 限制3-7选项,没有登陆不能访问def inner(*args, **kwargs):if status_dic["status"]:ret = f(*args, **kwargs)return retelse:print("-------登录页面-------")login()ret = f(*args, **kwargs)return retreturn inner@auth
def article():print(f'欢迎{status_dic["username"]}访问文章页面')print("""1.写入文件2.导入md文件""")while 1:choice = input("请输入要选择的操作:").strip()if choice == "1":file_name = input("输入文件名:").strip()content = input("请输入内容").strip()with open(r'article/'+file_name, encoding="utf-8", mode="a") as f1:f1.write(content)print("写入文章成功")breakif choice == "2":with open("函数的进阶.md", encoding="utf-8") as f2,\open(r"article/"+"函数的进阶.text", encoding="utf-8", mode="w") as f3:f3.seek(0)for i in f2:f3.write(i)print("导入文件成功")breakelse:print("您输入的不合规范")@auth
def diary():print(f'欢迎{status_dic["username"]}访问日记页面')@auth
def comment():print(f'欢迎{status_dic["username"]}访问评论页面')file = os.listdir(os.path.dirname(__file__)+'/article')  # 把article文件夹里的文件,变成列表形式for index, obj in enumerate(file, 1):                    # 循环列表print(index, obj)while 1:choice = input("请输入要评论的文章的序号:").strip()if choice.isdigit():choice = int(choice)if 0 < choice <= len(file):                          # 限制用户输入序号的范围path = os.path.join(os.path.dirname(__file__)+'/article', file[choice-1])   # 拼接路径,找到该文件with open(path, encoding="utf-8", mode="r+") as f1:ret = f1.read()print(ret)content = input("请输入要评论的内容")sensitive = ["苍老师", "东京热", "武藤兰", "波多野结衣"]         # 此列表为敏感字符for i in range(len(sensitive)):                          # 敏感字符替换等长度*if sensitive[i] in content:content = content.replace(sensitive[i], '*' * len(sensitive[i]))if "-"*20 not in ret:                             # 判断如果不在这里加上"评论区"三个字f1.write("评论区:" + "\n" + "-"*20 + "\n" + f'{status_dic["username"]}:\n{content}' + "\n")print("评论成功")return Trueelse:                                  # 否则直接写入评论f1.write(f'{status_dic["username"]}:\n{content}' + "\n")print("评论成功")return Trueelse:print("请选择正确的文章序号")else:print("输入内容含有非法字符")@auth
def enshrine():print(f'欢迎{status_dic["username"]}访问收藏页面')# 注销
def login_out():status_dic['username'] = Nonestatus_dic['status'] = Falseprint('注销成功')# 退出程序
def exit_program():global flagflag = Falsereturn flagdef run():choice_dict = {1: login,2: register,3: article,4: diary,5: comment,6: enshrine,7: login_out,8: exit_program,}while flag:print('''欢迎来到博客园首页1:请登录2:请注册3:文章页面4:日记页面5:评论页面6:收藏页面7:注销8:退出程序''')choice = input('请输入您选择的序号:').strip()if choice.isdigit():choice = int(choice)if 0 < choice <= len(choice_dict):choice_dict[choice]()else:print("您输入的超出范围")else:print("输入不合规范,重新输入")if __name__ == '__main__':run()

转载于:https://www.cnblogs.com/duyu123/p/11116754.html

利用装饰器模拟博客园登陆相关推荐

  1. python在化工模拟中的应用_python完成模拟博客园登陆

    importos#登录状态 status_dic ={'username': None,'status': False } flag=True#用户名,密码 以字典形式打开 defuser_pwd() ...

  2. python 装饰器写博客园

    需求 1),启动程序,首页面应该显示成如下格式: 欢迎来到博客园首页 1:请登录 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 8:退出程序 2),用户输入选项,3~6 ...

  3. python博客园_python3 模拟博客园登录

    '''作业题目: 模拟博客园登录 作业需求: 1),启动程序,首页面应该显示成如下格式: 欢迎来到博客园首页 1:请登录 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 ...

  4. 项目分享:模拟博客园登录

    项目二:模拟博客园登录 声明: 项目代码纯粹本人自己编写,无任何抄袭.转载等情况,所以写的很low,仅供大家参考,有不懂的随时评论留言 项目要求: 首先程序启动,显示下面内容供用户选择: 请登录 请注 ...

  5. python博客园_python模拟博客园登录-基础版

    mport time import inspect from functools import wraps user_status = {'username': None,'status': Fals ...

  6. Splinter学习--初探2,模拟博客园登录

    推荐一个免费的论文查重网站:http://www.paperfree.cn 这一次想模拟登录操作,从较为简单的开始,博客园的登录一般不需要验证码,就拿它试验了. 首先,打开园子登录首页http://p ...

  7. Splinter学习--模拟攥写博客园随笔

    为了验证Splinter的多种动作,这里将使用Splinter模拟博客园里面新增随笔的操作. 第一步:登录博客园,方法同Splinter学习--初探2,模拟博客园登录 第二步:跳转到"添加随 ...

  8. 如果我是博客园的产品经理【下】

    题记 本来打算为博客园写一篇文章就算了 但有位园友提出了几个问题很有代表性 所以打算再就此写一篇 问题如下: 1.知识的分享应该是免费无私的 2.国外有很多高质量的开源项目,为什么不强制收费(而是采用 ...

  9. 博客园的最后一篇博文,还是要离开了(附带个人博客源码分享)

    引言 最近LZ一直忙于搭建自己的个人博客,目前已经初见成效,虽然很多功能还不完善,但看看文章,评论评论还是没问题的.俗话说,80%的需求是20%的功能满足的,目前LZ的个人博客就属于这个状态. 搭建个 ...

最新文章

  1. 06 回归算法 - 损失函数、过拟合欠拟合
  2. 仿ArrayList功能的bag类
  3. spyder的输出面板不小心关掉了怎么办?
  4. 计算机网络-思维导图(2)物理层
  5. fatal: unable to access ‘https://github.com/PanJiaChen/vue-element-admin.git/‘: OpenSSL SSL_read: Co
  6. 摇滚bono_Java比以往任何时候都摇滚
  7. Luogu4755 Beautiful Pair 最值分治、主席树
  8. Python批量提取Word文件题库中的答案
  9. **无人机水平方向四环串级控制,竖直方向三环串级控制
  10. WIN7 通知栏处喇叭上有个小红叉,提示未插入“未插入扬声器或耳机”的解决方法
  11. 计算机网络WAN接口,无线路由器WAN口连接类型如何选择【详细介绍】
  12. matlab 坐标点标记符号表
  13. (程序员必备技能)基于Python的鼠标与键盘控制实战扩展与源码
  14. Postman批量执行用例
  15. 历史的1000+篇文章总结
  16. MySQL —— 14、触发器
  17. python折线图绘制——记录
  18. 基于网页在线图书小说电子书阅读系统 毕业设计毕设源码毕业论文开题报告参考(1)系统功能概要
  19. docker基础手册
  20. 《丑奴儿》——看庭审刘志军

热门文章

  1. 手把手教你写专利申请书/如何申请专利
  2. 数字货币智能合约的概念与演变
  3. 利用Ajax爬取今日头条头像,街拍图片。关于崔庆才python爬虫爬取今日头条街拍内容遇到的问题的解决办法。
  4. python+opencv制作电脑摄像头扫描二维码并自动打开
  5. ImageJ划痕实验分析
  6. AI轻松入门,AI零基础入门,AI初级教学,
  7. 佐客牛排机器人餐厅_测评全球首家机器人餐厅综合体,AI味道竟不输“大厨”?...
  8. 未检测到扫描仪Win10解决 WIA服务1061
  9. 10种网站数据的采集方法
  10. vue项目使用svg图片