首页 > 解决方案 > 如何将参数传递给装饰器中的函数

问题描述

我有一个装饰师,想让newname传给 protected()展示,我该怎么办?

if name='Jan'and 在装饰器中newname等于Jan hello!!!and thennewname可以 print(newname)用在protected()

我的代码


应用程序.py

@app.route('/protected')
@lookname
def protected():
    return jsonify({'message': 'This is only available for people with valid tokens!'})

外观名称.py

def lookname(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        name = request.cookies.get('name')
        newname = name + ' hello!!!'
        return f(*args, **kwargs)
    return decorated

我想喜欢这个

@app.route('/protected')
@lookname
def protected():
    print(newname)
    return jsonify({'message': 'This is only available for people with valid tokens!'})

标签: pythonflaskdecorator

解决方案


您可以使用g来携带绑定到请求上下文的任何信息位。

from flask import g

def lookname(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        name = request.cookies.get('name')
        g.newname = name + ' hello!!!'
        return f(*args, **kwargs)
    return decorated

然后在protected

from flask import g

@app.route('/protected')
@lookname
def protected():
    print(g.newname)
    # ...

推荐阅读