需求

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),注销用户是指注销用户的登录状态,使其在访问任何页面时,必须重新登录。


# auth_M:Yang
# date 2019-1-24
# python 3.6
# os winimport time
login_status = {"uaername":None,'status':False}def fn_log(a):struct_time = time.localtime()write_time = time.strftime("%Y-%m-%d %H:%M:%S", struct_time)with open('fn_log', encoding='utf8', mode='a') as f1:f1.write('用户:%s在%s访问了%s页面\n' %(login_status['username'],write_time,a)) #写日志 用户 时间 页面操作print('欢迎[ %s ]用户,访问了[ %s ]页面\n' %(login_status['username'],a))  #在屏幕输出def login(f):def inner(*args,**kwargs):if login_status['status']:   # 用户登录信息ret = f(*args,**kwargs)return retelse:print('请先登录')loginIn()ret = f(*args,**kwargs)return retreturn innerdef loginIn():username = input("输入用户名:>>")with open("register", mode="r", encoding="utf-8") as file:for line in file:users = line.strip().split(',')users_info = {"name": users[0], "pws": users[1]}  # 循环获取 帐号和密码if username == users_info["name"]:  # 判断用户是否存在while 1:password = input('请输入密码:>>')if password == users_info["pws"]:  # 判断用户密码是否正确login_status['username'] = usernamelogin_status['status'] = Trueprint("登录成功\n")start()else:n = 3while n > 0:  # 三次错误密码循环if n == 1:print("三次密码错误,退出系统")exit()else:n -= 1print('用户或密码错误,请重新输入,还有%s机会' % n)password = input('请输入密码:>>')if password == users_info["pws"]:  # 判断用户密码是否正确login_status['username'] = usernamelogin_status['status'] = Trueprint("登录成功\n")start()else:flog = True  # 标记用 True 为没有这个用户if flog:print("用户不存在,请注册")start()def register():freg = open('register', 'a+', encoding='utf-8')freg.seek(0)users_info = {}  # 定义存放用户名,密码的 字典for line in freg.readlines():  # 逐行读取用户名,密码,并存储到字典中users = line.strip().split(',')users_info[users[0]] = users[1]print(users_info)while 1:username = input('请输入注册用户名:>>').strip()if username in users_info.keys():print('用户名已存在,请重新注册或登录\n')start()else:password = input('请输入密码:>>').strip()  # 确认两次密码输入cpasswd = input('请确认密码:>>').strip()if username and password and cpasswd:if password != cpasswd:print('两次输入密码不一致,请重新注册!\n')register()else:freg.write(username + ',' + password + '\n')  # 写入密码文件print('注册成功\n')freg.close()start()@login
def article():fn_log("文章")start()@login
def dariy():fn_log("日记")start()@login
def comment():fn_log("评论")start()@login
def Collection():fn_log("收藏")start()def Cancellation():if login_status["status"]:login_status["status"] = Falseprint("已退出当前用户\n")start()else:print("尚未登录,请选择其他操作\n")def loginOut():print("退出系统,再见")exit()dic = {1:loginIn,2:register,3:article,4:dariy,5:comment,6:Collection,7:Cancellation,8:loginOut}def start():print('''1[登录] 2[注册] 3[文章页面] 4[日记页面] 5[评论页面] 6[收藏页面] 7[注销] 8[退出]''')num = input("输入选项:>>").strip()if num.isdigit():if int(num) >= 1 and int(num) <= 8:dic[int(num)]()else:print("选择有误重新选择\n")start()else:print("选择有误重新选择\n")start()
start()

python 装饰器写博客园相关推荐

  1. 利用装饰器模拟博客园登陆

    要求: 项目分析:一.首先程序启动,页面显示下面内容供用户选择: 1.请登录2.请注册3.进入文章页面4.进入评论页面5.进入日记页面6.进入收藏页面7.注销账号8.退出整个程序 二.必须实现的功能: ...

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

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

  3. .NET轻松写博客园爬虫

    爬虫,是一种按照一定的规则,自动地抓取网站的程序或者脚本.`.NET`写爬虫非常简单,并能轻松优化性能.今天我将分享一段简短的代码,爬出博客园前200页精华内容,然后通过微小的改动,将代码升级为多线程 ...

  4. python的selenium模块博客园_Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径 2. 通过 `$PATH`环境变量找寻浏览器驱动 控制浏览器访问URL find系列函数定位元素 - `find_ ...

  5. python基础代码大全博客园,python基础代码大全解释

    python必背入门代码是什么? python必背代码是:defnot_empty(s):returnsandlen(s.strip())>0#returnsands.strip()#如果直接单 ...

  6. python中json模块博客园_python的json模块

    python的json模块 什么是序列化和反序列化? 序列化 在分布式环境下,无论是何种数据,都会以二进制序列的形式在网络上传输.序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写 ...

  7. python之路 mysql 博客园_Python之路(二十七):Mysql(下)

    本结目录 数据库操作 数据表操作 外键约束 多表查询 索引 事务 python连接Mysql 数据库操作 此操作针对windows环境下 该操作再Mysql服务器启动以及客户端连接之后 对数据库操作之 ...

  8. python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...

    教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...

  9. 用markdown写博客园

    /p/cnblogs_markdown.html markdown的使用:https://blog.csdn.net/a1b2c300/article/details/53891125 吗都是 不是真 ...

最新文章

  1. 在Centos 7下编译openwrt+njit-client
  2. 讲解 Redis 的一篇深度好文!
  3. (3)数据库的建立和数据表的操作
  4. sockaddr_in 结构体
  5. Wordcount on YARN 一个MapReduce示例
  6. linux上C++编译过程
  7. 12. 我的第一个容器化应用
  8. Setforegroundwindow 将窗口置最前
  9. lstm原理及实现_LSTM原理
  10. Oracle之自动收集统计信息
  11. js datagrid 移动去重
  12. java开发flex_FLEX+Java开发
  13. 整体二分初识--POJ2104:K-th Number
  14. Flutter实战之底部导航栏 BottomNavigation
  15. Visio 2003 sp3下载
  16. C#实现微信自动发送消息
  17. linux无线网卡消失,Linux下无线网卡无法开启解决办法
  18. fifo的rdata_同步Fifo和异步fifo
  19. Day296.原子类 -Juc
  20. Google books deal battle heats up 谷歌数字图书馆建

热门文章

  1. Python小程序:你看?这千年难遇的雪景——简直“美到犯规”【满屏雪花飞舞】
  2. 普通按钮+提交按钮+重置按钮
  3. 计算机办公靠什么,办公笔记本电脑怎么选?看这里,从3000到10000+都有
  4. Google Latitude (Google 纵横)
  5. css marquee属性,css之marquee,让你的文字跳起来
  6. C# WPF框架下 Console.WriteLine()无法打印内容
  7. 用python写一个聊天小程序!和女朋友的专属聊天工具!
  8. PageInfo对处理过的list进行分页
  9. Scala变量定义val与var的区别
  10. 使用阿里云短信通知服务发送短信--工具类