美文网首页
获取函数参数,可以用在装饰器上

获取函数参数,可以用在装饰器上

作者: 晓函 | 来源:发表于2021-03-18 20:31 被阅读0次
def f(x,y):
  pass

print(f.__code__.co_argcount)
print(f.__code__.co_varnames)
#请求合法性验证,如签名
def verify_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        params = request.json or request.args.to_dict()
        ret = check_sign(params)
        if ret['code'] != 1000:
            return json.dumps(d_convert(ret), ensure_ascii=False)

        # 判断方法是否有名为current_user的参数,有的话就尝试通过token获取用户
        arg_count = f.__code__.co_argcount
        arg_names = f.__code__.co_varnames
        if arg_count > 0 and arg_names[0] == 'current_user':
            ret = check_login_token(params.get('token'))
            # 传入current_user
            return f(current_user=ret.get('user'), *args, **kwargs)
        else:
            return f(*args, **kwargs)

    return decorated_function


#可以自由选择是否需要获取current_user
@bp_user.route('/home',methods=['GET','POST'])
@verify_required
def home(current_user):
    print(f'home:{current_user.id=}')

#可以自由选择是否需要获取current_user
@bp_user.route('/test',methods=['GET','POST'])
@verify_required
def test():
  pass

相关文章

  • 获取函数参数,可以用在装饰器上

  • NestJS 中 @Query、@Body 等装饰器引发的思考

    最近在看NestJS,发现控制器成员函数参数中可以使用@Query、@Body等函数参数装饰器来获取响应的请求数据...

  • 装饰器的使用

    函数带多个参数 普通的装饰器, 打印函数的运行时间 装饰器带有多个参数当装饰器带有多个参数的时候, 装饰器函数就需...

  • python装饰器2018-11-19

    装饰器也是个函数 装饰器有参数,参数是函数 装饰器有内嵌函数 装饰器有返回值,返回值是内嵌函数 装饰器使用时直接挂...

  • 二十:Python之多个装饰器装饰

    一:装饰顺序 从离函数最近装饰器开始装饰 二:装饰不带参数的函数 三:装饰固定参数 四:装饰不固定参数 五:通用装饰器

  • Python基础进阶 Zero to Hero装饰器(一)

    1.装饰器定义 装饰器本质上是一个函数,可以接受一个函数作为参数 2.装饰器简单的例子 承接之前的内容,英雄释放火...

  • Python11--装饰器

    1.装饰器定义 装饰器本质上是一个函数,可以接受一个函数作为参数 2.装饰器简单的例子 承接之前的内容,英雄释放火...

  • python 装饰器

    python 装饰器 描述 python 中一切皆对象,函数也可以当作参数传递 装饰器就是接受一个函数作为参数,添...

  • 14.python装饰器进阶之参数与返回值

    一、带一个参数的装饰器 上一节我们讨论的装饰器都是装饰不带参数的函数,现在要装饰一个带参数的函数怎么办呢? 二、带...

  • 装饰器

    装饰器有点像高阶函数;一个函数返回另一个函数; 装饰器是一个函数;用在类、类的属性、类的方法、类方法的参数上;功能...

网友评论

      本文标题:获取函数参数,可以用在装饰器上

      本文链接:https://www.haomeiwen.com/subject/xywpcltx.html