python基础学习1-双层装饰器(实现登陆注册)
LOGIN_USER = {"IsLogin":False}
def check_login(func): #检查登陆的装饰器
def inner(*args,**kwargs):
if LOGIN_USER["IsLogin"]:
r = func(*args,**kwargs)
return r
else:
print("请先登录!")
return inner
def check_role(func):#检查权限的装饰器
def inner(*args,**kwargs):
if LOGIN_USER["role"]=="":
r = func(*args,**kwargs)
return r
else:
print("请用管理员帐户登录!")
return inner
def login(username,pwd):#登陆函数
f = open('db1',"r",encoding="utf-8")
for line in f:
r= line.split("|")
if r[0]==username and r[1] == pwd:
LOGIN_USER["IsLogin"] = True
LOGIN_USER["username"] = username
LOGIN_USER["pwd"]=r[1]
LOGIN_USER["mail"]=r[2]
LOGIN_USER["phone"]=r[3]
LOGIN_USER["addr"]=r[4]
LOGIN_USER["role"]=r[5].replace('\n','')
break
f.close()
@check_login
def Register():#用户注册函数
print("欢迎用户%s" %LOGIN_USER["username"])
uname =input("输入注册用户名称:") #--取得新加注册记录的信息
upwd = input("请输入注册用户密码")
umail = input("请输入注册用户邮箱")
uphone = input("请输入注册用户电话")
uaddr = input("请输入注册用户地址")
urole=""
fr= open('db1','r',encoding='utf-8') #---读取现有用户记录
frs = fr.readlines()
fr.close()
fw = open('db1','w',encoding='utf-8') #--覆盖写入现有用户记录和新加用户记录
for line in frs:
fw.write(line)
fw.write("\n"+"%s|%s|%s|%s|%s|%s" % (uname,upwd,umail,uphone,uaddr,urole))#--写入新加用户记录
fw.close()
print("注册用户成功!")
@check_login
def ChangePwd(): #用户修改密码函数
print("欢迎用户%s" %LOGIN_USER["username"])
mpw=input("请输入修改的密码:")
fr= open('db1','r',encoding='utf-8') #---读取现有用户记录
frs = fr.readlines()
fr.close()
fw = open('db1','w',encoding='utf-8') #--覆盖写入现有用户记录和新加用户记录
for line in frs:
ulist= line.split('|')
if ulist[0]== LOGIN_USER["username"]:
fw.write("%s|%s|%s|%s|%s|%s" % (ulist[0],mpw,ulist[2],ulist[3],ulist[4],ulist[5]))
else:
fw.write(line)
fw.close()
print("修改密码成功")
@check_login
def ShowUserInfo():#用户查看详细信息函数
print("欢迎用户%s" %LOGIN_USER["username"])
fr= open('db1','r',encoding='utf-8')#---读取现有用户记录
frs = fr.readlines()
fr.close()
for line in frs:
ulist= line.split('|')
if ulist[0]== LOGIN_USER["username"]:
uinfo =""" 用户信息
------------------------------
username:%s
email :%s
phone :%s
address :%s
role :%s
------------------------------
""" %(LOGIN_USER["username"],
LOGIN_USER["mail"],
LOGIN_USER["phone"],
LOGIN_USER["addr"],
LOGIN_USER["role"])
print(uinfo)
@check_login #调用双层装饰器 先执行前面的装饰器 先检查登陆 ,在检查是否有权限
@check_role
def DeleteUser():#管理员删除用户信息
print("欢迎用户%s" %LOGIN_USER["username"])
duser = input("请输入需要删除用户:")
fr= open('db1','r',encoding='utf-8') #---读取现有用户记录
frs = fr.readlines()
fr.close()
fw = open('db1','w',encoding='utf-8')
for line in frs:
ulist =line.split('|')
if ulist[0]==duser:
continue
else:
fw.write(line)
fw.close()
print("删除成功!")
@check_login#调用双层装饰器
@check_role
def AddUser():#管理员添加用户信息
print("欢迎用户%s" %LOGIN_USER["username"])
uname =input("输入用户名称:")#--取得新加注册记录的信息
upwd = input("请输入用户密码")
umail = input("请输入用户邮箱")
uphone = input("请输入用户电话")
uaddr = input("请输入用户地址")
urole=""
fr= open('db1','r',encoding='utf-8') #---读取现有用户记录
frs = fr.readlines()
fr.close()
fw = open('db1','w',encoding='utf-8')#--覆盖写入现有用户记录和新加用户记录
for line in frs:
fw.write(line)
fw.write("\n"+"%s|%s|%s|%s|%s|%s" % (uname,upwd,umail,uphone,uaddr,urole)) #--写入新加用户记录
fw.close()
print("添加用户成功!")
@check_login#调用双层装饰器
@check_role
def SeachUser():#管理员根据输入的关键字模糊查询用户信息
print("欢迎用户%s" %LOGIN_USER["username"])
search = input("请输入搜索关键字:")
fr= open('db1','r',encoding='utf-8')#---读取现有用户记录
frs = fr.readlines()
fr.close()
for line in frs:
ss = line.split('|')
if search in ss:
print("用户信息".center(50,'-'))
uinfo ="""
username:%s
email :%s
phone :%s
address :%s
role :%s
""" %(ss[0],
ss[2],
ss[3],
ss[4],
ss[5])
print(uinfo)
print("End".center(50,'-'))
@check_login#调用双层装饰器
@check_role
def ChangeRole():#管理员提升普通用户权限为管理员权限
print("欢迎用户%s" %LOGIN_USER["username"])
gname=input("请输入需提高权限的用户:")
fr= open('db1','r',encoding='utf-8') #---读取现有用户记录
frs = fr.readlines()
fr.close()
fw = open('db1','w',encoding='utf-8')#--覆盖写入现有用户记录和新加用户记录
for line in frs:
ulist= line.split('|')
if ulist[0]== gname:
fw.write("%s|%s|%s|%s|%s|%s" % (ulist[0],ulist[1],ulist[2],ulist[3],ulist[4],""))
else:
fw.write(line)
fw.close()
print("提高权限成功")
def main():#程序主入口函数
while True:
print("请选择操作模块")
qt= input( "1.注册 ;2.修改用户密码 ;3.修改用户权限 ;4.添加普通用户;5.查看本用户信息;6.删除用户;7.查询用户信息;Q-退出")
if not LOGIN_USER["IsLogin"] and qt !="q":
un = input("用户名:")
pd = input("密码:")
login(un,pd)
if qt =="":
Register()
elif qt =="":
ChangePwd()
elif qt =="":
ChangeRole()
elif qt =="":
AddUser()
elif qt=="":
ShowUserInfo()
elif qt=="":
DeleteUser()
elif qt =="":
SeachUser()
elif qt=="q":
print("再见")
break
main()#调用入口函数
python基础学习1-双层装饰器(实现登陆注册)的更多相关文章
- 十一. Python基础(11)—补充: 作用域 & 装饰器
十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...
- python基础整理4——面向对象装饰器惰性器及高级模块
面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...
- Python基础(八)装饰器
今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...
- Py修行路 python基础 (十)装饰器
装饰器 一.定义 装饰器:顾名思义,就是对某个东西起到装饰修饰的功能. python中的装饰器,其本质上就是一个python函数,它可以让其他函数在不需要任何代码变动的前提下增加额外功能.通俗理解就是 ...
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- python基础知识-11-函数装饰器
python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 ) def func(): pass v1 = v2 = func #将函数名赋予一个变量,就和变量赋值是同 ...
- python基础16_闭包_装饰器
不了解是否其他语言也有类似 python 装饰器这样的东西. 最近才发现ECMAScript6也是有生成器函数的,也有 yield generator 装饰器的基础知识是闭包: # 闭包:嵌套函数, ...
- Python基础4 迭代器、装饰器、软件开发规范
本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...
- python基础(八)生成器,迭代器,装饰器,递归
生成器 在函数中使用yield关键字就会将一个普通的函数变成一个生成器(generator),普通的函数只能使用return来退出函数,而不执行return之后的代码.而生成器可以使用调用一个next ...
随机推荐
- mvc5中重命名项目的名称后,出现"找到多个与名为“Home”的控制器匹配的类型"
1.已把项目中所有的Webapplication1改为了MvcMovie,但是运行后,还是报错: 找到多个与名为“Home”的控制器匹配的类型 2.已重新生成解决方安,还是不行. 解决方法:把bin文 ...
- scrapy实战--登陆人人网爬取个人信息
今天把scrapy的文档研究了一下,感觉有点手痒,就写点东西留点念想吧,也做为备忘录.随意写写,看到的朋友觉得不好,不要喷我哈. 创建scrapy工程 cd C:\Spider_dev\app\scr ...
- 【转】什么是JavaScript
转自mdn学习网站-什么是JavaScript 什么是JavaScript? 欢迎来到 MDN JavaScript 初学者的课程! 在第一篇文章中,我们将会站在一定的高度来俯看 JavaScript ...
- CSS学习摘要-盒子模型
注:全文摘要自网络开发者网站,当然间隔也会整理一些思路和格式排版添加进去. CSS框模型(译者注:也被称为"盒模型")是网页布局的基础 --每个元素被表示为一个矩形的方框,框的内容 ...
- windows server 2016 无法联网问题
首先,联网分解为两个问题,一.WLAN(无线网).二.以太网(有线网) 一 .WLAN问题解决方案 1.打开服务器管理器 2.添加角色和功能 3.一直点下一步到“功能”,勾选 DirectPlay 和 ...
- zabbix日常监控Apache2.4
Apache的安装请参考https://www.cnblogs.com/huangyanqi/p/9168637.html 1.修改配置 [root@apache ~]# httpd -v Serve ...
- React Native 基础报错及解决方案记录
刚开始上手RN,碰到很多坑,记录一下.碰到问题多去看看github上面的issue! 启动命令react-native run-ios报错 1.:xcrun: error: unable to fin ...
- python and、or以及and-or
@Python: and.or以及and-or 一.and: 在Python 中,and 和 or 执行布尔逻辑演算,如你所期待的一样,但是它们并不返回布尔值:而是,返回它们实际进行比较的值之一. & ...
- Java阶段性总结与获奖感想
一.获奖感想 这次能获得小黄衫,可以说是对我自己这半学期以来努力学习的一种肯定,也是激励我继续努力的动力. 首先,我要感谢给予我们耳目一新的学习方式的娄老师.我曾在我期望的师生关系中提到,我的高中班主 ...
- 1031. [JSOI2007]字符加密【后缀数组】
Description 喜欢钻研问题的JS同学,最近又迷上了对加密方法的思考.一天,他突然想出了一种他认为是终极的加密办法 :把需要加密的信息排成一圈,显然,它们有很多种不同的读法.例如下图,可以读作 ...