zoukankan      html  css  js  c++  java
  • 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('
    ','')
     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("
    "+"%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("
    "+"%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  
    View Code
  • 相关阅读:
    文件上传跨域解决方案-jQuery-File-Upload
    求数列的的增幅,已知起始列和结束列,中间阶梯数
    mud那些坑 find_object问题
    jquery mCustomScrollbar使用
    JS的Date对象
    JS获取当前日期
    Go数组求和
    Go九九乘法表
    Go语言基础之time包
    Go语言基础之流程控制
  • 原文地址:https://www.cnblogs.com/whzym111/p/5794451.html
Copyright © 2011-2022 走看看