装饰器

装饰器

廖雪峰python网站学习:https://www.liaoxuefeng.com/wiki/1016959663602400/1017451662295584

在不改变原函数情况下进行功能扩展。
这个不改变包括函数内部的逻辑,和函数的调用代码。
只需要在原来函数上方加一个魔术方法。

** 设计一个装饰器,使api请求资源时会读取缓存,并且可以设置缓存的超时时间。**

"""设计一个装饰器,使api请求资源时会读取缓存,并且可以设置缓存的超时时间"""
import time
from datetime import datetime

from flask import Flask

app = Flask(__name__)
created = 0
cache_response = None


def cache(timeout=5):
    """缓存请求的资源,默认缓存失效时间为5秒"""
    def decorator(func):
        def wrapper(*arg, **kwargs):
            global created, cache_response
            now = time.time()
            if now - created > timeout:
                created = now
                cache_response = func(*arg, **kwargs)

            return cache_response
        return wrapper
    return decorator

# 添加header的装饰器
def set_header(headers):
    def decorator(func):
        def wrapper(*args, **kwargs):
            response = func(*args, **kwargs)
            response.headers.update(headers)
            return response
        wrapper.__name__ = func.__name__
        return wrapper

    return decorator


@app.route('/')
@cache(15)
def index():
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S") + " > Hello! "


if __name__ == '__main__':
    app.run(debug=True)
回忆滋润坚持
原文地址:https://www.cnblogs.com/james5d/p/14204196.html