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

 

posted on 2019-10-30 10:34  星河赵  阅读(448)  评论(0编辑  收藏  举报

导航