zoukankan      html  css  js  c++  java
  • python3--装饰器高级学习版

    __author__ = "Aaron Fan"
    import time #导入time模块
    user,passwd = 'alex','abc123' #用户名密码
    def auth(auth_type): #创建auth函数,创建auth_type形参
    #print("auth func:",auth_type) #打印形参auth_type的值
    def outer_wrapper(func): #创建outer_wrapper函数,创建func形参
    def wrapper(*args, **kwargs): #创建wrapper函数,创建非固定参数*args,**kwargs
    #print("wrapper func args:", *args, **kwargs) #打印传进来的这些非固定参数的值
    if auth_type == "local": #如果auth函数中的形参auth_type的值等于local
    username = input("Username:").strip() #输入用户名
    password = input("Password:").strip() #输入密码
    if user == username and passwd == password: #如果用户名和密码全部正确
    print("33[32;1mUser has passed authentication33[0m") #以绿色的颜色打印一句登陆成功的提示语



    res = func(*args, **kwargs) # from home #这里主要是为了显示home()函数中的return值:from home
    print("---after authenticaion ") #打印一句话
    return res #返回定义的res变量的值


    else: #否则账号或者密码错误
    exit("33[31;1mInvalid username or password33[0m")
    elif auth_type == "ldap": #如果auth函数中的形参auth_type的值等于ldap
    print("搞毛线ldap,不会。。。。") #ldap的处理语句,这里暂时先用一句print代替了,记得后面练习是需要去细化一下

    return wrapper #return wrapper
    return outer_wrapper #return outer_wrapper

    # index主页,不需要用户名密码,可以直接登录,所以这里也无需装饰器
    def index():
    print("welcome to index page")

    #home页面,需要通过local方式来匹配用户登陆
    @auth(auth_type="local") # home = wrapper()
    #注意@auth代表auth(),而@auth(auth_type="local")代表outer_wrapper()
    #所以这里其实是指 home = outer_wrapper(home) = wrapper
    def home():
    print("welcome to home page")
    return "from home"

    #bbs页面,需要通过ldap方式来匹配用户登陆
    @auth(auth_type="ldap")
    def bbs():
    print("welcome to bbs page")

    index()
    print(home()) #其实执行的是wrapper() 这个方式会显示home的return值
    #home() #其实执行的是wrapper() 这个不会显示return值
    bbs() #其实执行的是wrapper()
  • 相关阅读:
    Java启动工程时,加载固定数据到Map中(不用每次访问数据库)
    Java删除文件夹和其子文件、文件的拷贝和剪切
    EasyExcel导入工具(SpringMVC下使用)
    web工程启动时,在一个类中延迟加载Bean,因为该Bean类可能还没被JVM加载
    ECharts访问后台,JSON格式返回数据实例
    Java 实现缓存,一个线程存,一个线程取
    IE浏览器使用VLC实时显示视频(海康、大华)
    Windows和Linux下 Java开发ping工具类
    Quartz定时器+Spring + @Autowired注入 空指针异常
    ubuntu 安装mysql
  • 原文地址:https://www.cnblogs.com/AaronFan/p/6158855.html
Copyright © 2011-2022 走看看