装饰器的代码不是很明白,希望老师能解答下

来源:4-7 redis在django中的两种配置方法与使用&缓存装饰器的书写

慕哥1266152

2019-10-22

def cache(func):
    @wraps(func)
    def wrapper(obj, *args):
        key = args[0]
        value = _cache.get(key)
        if value:
            print('get it')
            return json.loads(value)
        rs = func(obj, *args)
        _cache.set(key, json.dumps(rs))
        return rs

    return wrapper

    @classmethod
    @cache
    def get(cls, id):
        rs = cls.objects.get(id=id)
        return {
            'id': rs.id,
            'username': rs.username,
            'age': rs.age,
            'email': rs.email,
            'info': rs.info,
            'create_time': str(rs.create_time),
            'update_time': str(rs.update_time)
        }

写回答

1回答

deweizhang

2019-10-22

装饰器在这里的作用是拿到缓存的key去redis里去获取 判断是否存在 ,如果存在直接返回,不再执行业务函数,如果不存在则执行业务函数,将函数结果缓存起来以便下次调用使用,并将结果返回。

0
3
deweizhang
回复
慕斯卡4245743
ld?时间长了记不住了。不过装饰器主要对于参数传递要非常灵活才能兼容更多场景
2020-06-07
共3条回复

Django入门到进阶-适合Python小白的系统课程

入门Django的同时,让你形成更贴近实际工作的Python Web开发知识体系

1114 学习 · 464 问题

查看课程