如何修复装饰器中缺少的参数?

How to fix missing argument in decorator?

我收到这个错误是因为我假设来自我的装饰器:

TypeError: update_wrapper() missing 1 required positional argument: 'wrapper'

这是我的装饰器:

def authenticate_restful(f):
    @wraps
    def decorated_function(*args, **kwargs):
        response_object = {
            'status': 'fail',
            'message': 'Provide a valid auth token.'
        }
        auth_header = request.headers.get('Authorization')
        if not auth_header:
            return jsonify(response_object), 403
        auth_token = auth_header.split(' ')[1]
        resp = User.decode_auth_token(auth_token)
        if isinstance(resp, str):
            response_object['message'] = resp
            return jsonify(response_object), 401
        user = User.query.filter_by(id=resp['sub']).first()
        if not user or not user.active:
            return jsonify(response_object), 401
        return f(resp, *args, **kwargs)
    return decorated_function

我正在 运行 测试这段代码,但我不知道如何调试它。 为什么它可能缺少包装器参数?

functools.wraps 需要位置参数。由于您没有提供它,因此它会给您一个错误。您需要这样做:

def authenticate_restful(f):
    @wraps(f)
    ...