zoukankan      html  css  js  c++  java
  • 有关登录认证的心得

      我们在创建一个系统时经常需要进行登录认证,若在一个模块实现登录,则其他模块无需再重复登录,那么怎样实现这一功能呢,我们可以结

    合装饰器来完成,下面结合一个简单的明星投票系统来简述这一功能的实现。

      投票系统包含“注册”“登录”“票数显示”“投票”及“退出”基本功能,第一步,我们先分别写出实现五个这五个功能的函数。今天记录用装饰器实现认

    证功能以,故此处“登录”及“票数显示”两个模块为例来说明。

     1 login_flag=False
     2 def wrapper(func):
     3     def inner(*args,**kwargs):
     4         global login_flag
     5         if login_flag==True:
     6             ret=func(*args,**kwargs)
     7             return ret
     8         else:
     9             login()
    10             ret = func(*args, **kwargs)
    11             login_flag == True
    12             return ret
    13     return inner
    14 
    15 def regester():
    16     flag=True
    17     while flag:
    18         username=input("请输入你的账户名:").strip()
    19         password=input("请输入你的密码").strip()
    20         with open("user_info",mode="a+",encoding="utf_8")as f1:
    21             for line in f1.readlines():
    22                 if username in line:
    23                     print("此用户名已使用,请更换注册")
    24                     break
    25             else:
    26                 f1.write(username+","+password+"
    ")
    27                 flag=False
    28 
    29 def login():
    30     global login_flag
    31     flag=True
    32     while flag:
    33         user=input("请输入您的用户名:").strip()
    34         psd=input("请输入你的密码:").strip()
    35         with open("user_info",encoding="utf-8")as f2:
    36             for line in f2.readlines():
    37                 username,password=line.strip().split(",")
    38                 if user==username and psd==password:
    39                     print("欢迎登录!")
    40                     flag=False
    41                     login_flag=True
    42 
    43 @wrapper
    44 def poll_list():
    45     with open("star_msg",encoding="utf-8")as f3:
    46         content=f3.read().strip()
    47         print(content)
    48 
    49 def choice():
    50     flag=True
    51     while flag:
    52         choose=input("****Welcome to the star voting system!****
    			1.用户注册
    			"
    53                    "2.用户登录
    			3.明星排行榜""
    			4.投票界面
    			5.退出系统
    "
    54                    ">>>Please choose your page:").strip()
    55         if choose=="1":
    56             regester()
    57         elif choose=="2":
    58             login()
    59         elif choose=="3":
    60             poll_list()
    61         elif choose=="4":
    62             vote()
    63         else:
    64             logout()
    65             flag=False
    66 choice()
    View Code

    上图是我写的过程中发现注意的问题:

    1.总还是忘了在装饰器内部引用全局变量,造成装饰其他函数时每运行一次都需要重复登录,没有达到模块间相互认证的目的

    2.判定未登陆的,在其执行完登录操作后一定要改变一下全局变量,这样才能对其他模块关联产生作用

  • 相关阅读:
    第十六周学习进度报告
    个人课程总结
    第一阶段意见评论
    用户评价
    第二阶段10
    第二阶段9
    第二阶段8
    第十五周学习进度报告
    第二阶段7
    第二阶段6
  • 原文地址:https://www.cnblogs.com/wdbgqq/p/9216817.html
Copyright © 2011-2022 走看看