python基础学习1-双层装饰器(实现登陆注册)
1 LOGIN_USER = {"IsLogin":False} 2 3 4 5 def check_login(func): #检查登陆的装饰器 6 def inner(*args,**kwargs): 7 if LOGIN_USER["IsLogin"]: 8 r = func(*args,**kwargs) 9 return r 10 else: 11 print("请先登录!") 12 return inner 13 14 15 16 def check_role(func):#检查权限的装饰器 17 def inner(*args,**kwargs): 18 if LOGIN_USER["role"]=="2": 19 r = func(*args,**kwargs) 20 return r 21 else: 22 print("请用管理员帐户登录!") 23 return inner 24 25 26 27 def login(username,pwd):#登陆函数 28 f = open('db1',"r",encoding="utf-8") 29 for line in f: 30 r= line.split("|") 31 if r[0]==username and r[1] == pwd: 32 LOGIN_USER["IsLogin"] = True 33 LOGIN_USER["username"] = username 34 LOGIN_USER["pwd"]=r[1] 35 LOGIN_USER["mail"]=r[2] 36 LOGIN_USER["phone"]=r[3] 37 LOGIN_USER["addr"]=r[4] 38 LOGIN_USER["role"]=r[5].replace('\n','') 39 break 40 f.close() 41 42 43 44 @check_login 45 def Register():#用户注册函数 46 print("欢迎用户%s" %LOGIN_USER["username"]) 47 uname =input("输入注册用户名称:") #--取得新加注册记录的信息 48 upwd = input("请输入注册用户密码") 49 umail = input("请输入注册用户邮箱") 50 uphone = input("请输入注册用户电话") 51 uaddr = input("请输入注册用户地址") 52 urole="1" 53 fr= open('db1','r',encoding='utf-8') #---读取现有用户记录 54 frs = fr.readlines() 55 fr.close() 56 fw = open('db1','w',encoding='utf-8') #--覆盖写入现有用户记录和新加用户记录 57 for line in frs: 58 fw.write(line) 59 fw.write("\n"+"%s|%s|%s|%s|%s|%s" % (uname,upwd,umail,uphone,uaddr,urole))#--写入新加用户记录 60 fw.close() 61 print("注册用户成功!") 62 63 64 65 @check_login 66 def ChangePwd(): #用户修改密码函数 67 print("欢迎用户%s" %LOGIN_USER["username"]) 68 mpw=input("请输入修改的密码:") 69 fr= open('db1','r',encoding='utf-8') #---读取现有用户记录 70 frs = fr.readlines() 71 fr.close() 72 fw = open('db1','w',encoding='utf-8') #--覆盖写入现有用户记录和新加用户记录 73 for line in frs: 74 ulist= line.split('|') 75 if ulist[0]== LOGIN_USER["username"]: 76 fw.write("%s|%s|%s|%s|%s|%s" % (ulist[0],mpw,ulist[2],ulist[3],ulist[4],ulist[5])) 77 else: 78 fw.write(line) 79 fw.close() 80 print("修改密码成功") 81 82 83 84 @check_login 85 def ShowUserInfo():#用户查看详细信息函数 86 print("欢迎用户%s" %LOGIN_USER["username"]) 87 fr= open('db1','r',encoding='utf-8')#---读取现有用户记录 88 frs = fr.readlines() 89 fr.close() 90 91 for line in frs: 92 ulist= line.split('|') 93 if ulist[0]== LOGIN_USER["username"]: 94 uinfo =""" 用户信息 95 ------------------------------ 96 username:%s 97 email :%s 98 phone :%s 99 address :%s 100 role :%s 101 ------------------------------ 102 """ %(LOGIN_USER["username"], 103 LOGIN_USER["mail"], 104 LOGIN_USER["phone"], 105 LOGIN_USER["addr"], 106 LOGIN_USER["role"]) 107 print(uinfo) 108 109 110 111 @check_login #调用双层装饰器 先执行前面的装饰器 先检查登陆 ,在检查是否有权限 112 @check_role 113 def DeleteUser():#管理员删除用户信息 114 print("欢迎用户%s" %LOGIN_USER["username"]) 115 duser = input("请输入需要删除用户:") 116 fr= open('db1','r',encoding='utf-8') #---读取现有用户记录 117 frs = fr.readlines() 118 fr.close() 119 fw = open('db1','w',encoding='utf-8') 120 for line in frs: 121 ulist =line.split('|') 122 if ulist[0]==duser: 123 continue 124 else: 125 fw.write(line) 126 fw.close() 127 print("删除成功!") 128 129 130 131 @check_login#调用双层装饰器 132 @check_role 133 def AddUser():#管理员添加用户信息 134 print("欢迎用户%s" %LOGIN_USER["username"]) 135 uname =input("输入用户名称:")#--取得新加注册记录的信息 136 upwd = input("请输入用户密码") 137 umail = input("请输入用户邮箱") 138 uphone = input("请输入用户电话") 139 uaddr = input("请输入用户地址") 140 urole="1" 141 fr= open('db1','r',encoding='utf-8') #---读取现有用户记录 142 frs = fr.readlines() 143 fr.close() 144 fw = open('db1','w',encoding='utf-8')#--覆盖写入现有用户记录和新加用户记录 145 for line in frs: 146 fw.write(line) 147 fw.write("\n"+"%s|%s|%s|%s|%s|%s" % (uname,upwd,umail,uphone,uaddr,urole)) #--写入新加用户记录 148 fw.close() 149 print("添加用户成功!") 150 151 152 153 @check_login#调用双层装饰器 154 @check_role 155 def SeachUser():#管理员根据输入的关键字模糊查询用户信息 156 print("欢迎用户%s" %LOGIN_USER["username"]) 157 search = input("请输入搜索关键字:") 158 fr= open('db1','r',encoding='utf-8')#---读取现有用户记录 159 frs = fr.readlines() 160 fr.close() 161 for line in frs: 162 ss = line.split('|') 163 if search in ss: 164 print("用户信息".center(50,'-')) 165 uinfo =""" 166 username:%s 167 email :%s 168 phone :%s 169 address :%s 170 role :%s 171 """ %(ss[0], 172 ss[2], 173 ss[3], 174 ss[4], 175 ss[5]) 176 print(uinfo) 177 print("End".center(50,'-')) 178 179 180 181 @check_login#调用双层装饰器 182 @check_role 183 def ChangeRole():#管理员提升普通用户权限为管理员权限 184 print("欢迎用户%s" %LOGIN_USER["username"]) 185 gname=input("请输入需提高权限的用户:") 186 fr= open('db1','r',encoding='utf-8') #---读取现有用户记录 187 frs = fr.readlines() 188 fr.close() 189 fw = open('db1','w',encoding='utf-8')#--覆盖写入现有用户记录和新加用户记录 190 for line in frs: 191 ulist= line.split('|') 192 if ulist[0]== gname: 193 fw.write("%s|%s|%s|%s|%s|%s" % (ulist[0],ulist[1],ulist[2],ulist[3],ulist[4],"2")) 194 else: 195 fw.write(line) 196 fw.close() 197 print("提高权限成功") 198 199 200 201 def main():#程序主入口函数 202 while True: 203 print("请选择操作模块") 204 qt= input( "1.注册 ;2.修改用户密码 ;3.修改用户权限 ;4.添加普通用户;5.查看本用户信息;6.删除用户;7.查询用户信息;Q-退出") 205 if not LOGIN_USER["IsLogin"] and qt !="q": 206 un = input("用户名:") 207 pd = input("密码:") 208 login(un,pd) 209 if qt =="1": 210 Register() 211 elif qt =="2": 212 ChangePwd() 213 elif qt =="3": 214 ChangeRole() 215 elif qt =="4": 216 AddUser() 217 elif qt=="5": 218 ShowUserInfo() 219 elif qt=="6": 220 DeleteUser() 221 elif qt =="7": 222 SeachUser() 223 elif qt=="q": 224 print("再见") 225 break 226 227 228 229 main()#调用入口函数 230 231