python 装饰器写法
装饰器写法
装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。 首先,让我们讨论下如何写你自己的装饰器。
这可能是最难掌握的概念之一。我们会每次只讨论一个步骤,这样你能完全理解它。
import functools def wx_scan(view): @functools.wraps(view) def _wrapped(*args, **kwargs): r_data = Manager.get_token_new(request.ut) print("r_data", r_data, "ut", request.ut) if not r_data or r_data.get("status", 0) != 1: myadminIndexview = MyAdminIndexView() return myadminIndexview.redirect_to_wx_scan() return view(*args, **kwargs) return _wrapped @expose('/') @wx_scan def index(self): pass
# 游客小游戏 看视频 def device_youke_mingame(name=None): def youke_mingame(view): @functools.wraps(view) def _wrapped(*args, **kwargs): try: r_json = request.get_json() device_id = r_json.get("device_id", None) device_details = DeviceDetails.get_by_id(device_id) if device_details: if name == "addition": # 30%分数加成 key = "yk|addition_3||{}".format(device_details.id) rds_extra.set(key, 0.3) rds_extra.expire(key, 3600 * 24) device_details.total_video_count = getattr(device_details, "total_video_count", 0) + 1 device_details.save() return JsonResponse.response(code=1, user_id=device_details.id) return view(*args, **kwargs) except Exception as e: logger.exception(e) return _wrapped return youke_mingame