【发布时间】:2017-12-13 18:04:21
【问题描述】:
我问另一个问题python flask how to pass a dynamic parameter to a decorator,我得到了答案。
我现在正在使用flask,并且使用flask-restful api,这将非常容易构建restful api 我的代码是这样的。
class ShopCategoryListAPI(Resource):
#@redis_hash_shop(shop_id=LocalProxy(lambda: shop_id))
@redis_hash_shop(shop_id)
def get_shop(self, shop_id):
return Shop.query.get(shop_id)
def get(self, shop_id):
shop = self.get_shop(shop_id)
pass
我想在从 mysql 查询 shop 之前将 shop_id 传递给装饰器,这是我的装饰器演示。
def redis_hash_shop(shop_id):
def fn_wrapper(fn):
def decorated_function(*args, **kwargs):
key = 'shop:{}'.format(shop_id)
if redis_store.exists(key):
return redis_store.hgetall(key)
else:
shop = fn(*args, **kwargs)
pass
return decorated_function
return fn_wrapper
只是一个demo,会先在redis中获取店铺信息,然后再从mysql查询。
我犯了错误。它告诉我们Unresolved reference error
谁知道如何解决这个问题?提前致谢。
【问题讨论】:
-
shop_id需要在函数/装饰器之外定义。 -
@wmorrell 我用的是flask-Restful,不能在函数外定义shop_id,这里有一个demo,flask-restful.readthedocs.io/en/0.3.5/…
-
你使用 PyCharm 吗?
-
@lapinkoira 是的,PyCharm
标签: python flask redis python-decorators