装饰器的应用场景

# 1. 测试代码的运行时间

import time

def outter(func):
    def inner(*args,**kwargs):
        s = time.time()
        func()
        e = time.time()
        return e - s
    return inner


@outter
def demo():
    for i in range(1000000):
        pass


t = demo()
print(t) 

# 结果
0.022935152053833008

# 2. 限制访问

from flask import Flask,request

app = Flask(__name__)


@app.route("/")
def index():
    print(request.host)
    print(request.host_url)
    # 怎么设置一个逻辑,同一个host一秒钟访问次数超过10次,认为是非人为操作,然后拉入黑名单,12个小时候才能继续访问。
    # 方式一,将访问的ip插入到redis中,设置过期时间为1/10s,若插入成功,就可以继续访问,插入失败就返回请求过于频繁。
    # 对每一个网页的话都限制IP的话,就要封装一个装饰器,请求前先进行ip检查,flask中的请求钩子,before_request,是否合理
    # 方式二,


    return "welcome to flask"


if __name__ == '__main__':
    app.run(debug=True)

# 3. 判断是否是登录的状态

# 4. 装饰类,创建单例模式

# 普通装饰器
# 单例案例:
存在的问题:这种情况下装饰的类,不能被外界引用
# 特殊装饰器

原文地址:https://www.cnblogs.com/meloncodezhang/p/11923196.html