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-双层装饰器(实现登陆注册)的更多相关文章

  1. 十一. Python基础(11)—补充: 作用域 & 装饰器

    十一. Python基础(11)-补充: 作用域 & 装饰器 1 ● Python的作用域补遗 在C/C++等语言中, if语句等控制结构(control structure)会产生新的作用域 ...

  2. python基础整理4——面向对象装饰器惰性器及高级模块

    面向对象编程 面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程 面向对象编程(Object Oriented Pro ...

  3. Python基础(八)装饰器

    今天我们来介绍一下可以提升python代码逼格的东西——装饰器.在学习装饰器之前我们先来复习一下函数的几个小点,方便更好的理解装饰器的含义. 一.知识点复习 1, 在函数中f1和f1()有什么不同,f ...

  4. Py修行路 python基础 (十)装饰器

    装饰器 一.定义 装饰器:顾名思义,就是对某个东西起到装饰修饰的功能. python中的装饰器,其本质上就是一个python函数,它可以让其他函数在不需要任何代码变动的前提下增加额外功能.通俗理解就是 ...

  5. Day4 - Python基础4 迭代器、装饰器、软件开发规范

    Python之路,Day4 - Python基础4 (new版)   本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...

  6. python基础知识-11-函数装饰器

    python其他知识目录 1.装饰器学习前热身准备 1.1装饰器简介 1.2装饰器热身分析 ) def func(): pass v1 = v2 = func #将函数名赋予一个变量,就和变量赋值是同 ...

  7. python基础16_闭包_装饰器

    不了解是否其他语言也有类似 python 装饰器这样的东西. 最近才发现ECMAScript6也是有生成器函数的,也有 yield  generator 装饰器的基础知识是闭包: # 闭包:嵌套函数, ...

  8. Python基础4 迭代器、装饰器、软件开发规范

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  9. python基础(八)生成器,迭代器,装饰器,递归

    生成器 在函数中使用yield关键字就会将一个普通的函数变成一个生成器(generator),普通的函数只能使用return来退出函数,而不执行return之后的代码.而生成器可以使用调用一个next ...

随机推荐

  1. [C/C++]如何解读返回函数指针的函数声明

    今天在看<深入理解C++11>的时候,看到一段有意思的代码: int (*(*pf())())() { return nullptr; } 我立刻就懵了——从来没有见过这样的函数声明.那么 ...

  2. Python-Image 基本的图像处理操作

    Python-Image 基本的图像处理操作,有需要的朋友可以参考下. Python 里面最常用的图像操作库是 Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较 ...

  3. 如何生成.mobileprovision文件

    如何生成.mobileprovision文件 本人视频教程系列 **.mobileprovision文件的生成的第一步就需要你提供一个用于开发的App ID 1. 创建App ID 创建一个bundl ...

  4. web应用配置文件详解(web.xml)

    转载链接地址:http://blog.csdn.net/guihaijinfen/article/details/8363839 <?xml version="1.0" en ...

  5. December 02nd 2016 Week 49th Friday

    People will fall for its appearance while driving passionately. 观者倾心,驭者动魄. An advertisement of Merce ...

  6. November 19th 2016 Week 47th Saturday

    Nature didn't need an operation to be beautiful. It just was. 自然之美无需刻意而为,其本身即为美. Recently I saw seve ...

  7. NCE2

    1.A private conversation Last week I went to the theatre. I had a very good seat. The play was very ...

  8. 快速搭建一个Express工程骨架

    下载express-generator 通过应用生成器,可以帮我们快速搭建项目需要的骨架.这就需要npm在全局下载express-generator(-g就是在全局安装) npm install ex ...

  9. QT5.8连接Mysql提示QMYSQL driver not loaded

    我们都知道在QT5.8系列里已经带了Mysql的dll文件 驱动的名字为“qsqlmysql.dll”和“qsqlmysqld.dll” 但是按照网上的各种教程和博客基本都是错的,只有个别人是对的. ...

  10. rz -be 上传文件解压失败

    在把Windows上的文件传至Linux端时用到SecureCRT,一般小文件都没有问题,文件太大时则出现了上传后的文件只有几K大小,当然大于2个G的是不可能传的上去的了.对于几百M到1G多的大文件要 ...