2014-10-19 3 views
1

Я разрабатываю систему маркеров аутентификации для моего Колба сервера, и я хочу, чтобы иметь возможность установить декоратор выглядеть примерно так:параметров запроса Pass для Колба декоратора

@app.route('/my/data/') 
@requires_token_auth 
def get_my_endpoint_data(): 
    """Return JSON data"""" 
    return get_data() 

Тогда я попал в конечную точку, как/мой/данных? лексема = myawesometokenvalue

Я насторить декоратор функция как

def requires_token_auth(f): 
    @wraps(f) 
    def wrapped(*args, **kwargs): 
     ... do stuff ... 
     return f(*args, **kwargs) 
return wrapped 

к сожалению, «маркер» параметр не указанные внутри арг. Проблема заключается в том, что Flask передает req.view_args через, а не req.args.

* Из app.py колбы в *

1344   return self.view_functions[rule.endpoint](**req.view_args) 

Как я могу получить доступ к параметрам запроса изнутри обернутого функции?

+0

Где ваш код, который пытается получить доступ к параметру «токен»? –

+0

Внутри обернутой декораторной функции – ZECTBynmo

ответ

0

О, я просто понял, что могу сделать это так же, как я обычно!

token = request.args.get('token') 
0

Поскольку это первый результат Google для «параметров Колбы запроса декоратора», это решение я закончил с, чтобы добавить параметры запроса, на вершине параметров пути в методах:

def query_params(f): 
    """ 
    Decorator that will read the query parameters for the request. 
    The names are the names that are mapped in the function. 
    """ 
    parameter_names = inspect.getargspec(f).args 

    @wraps(f) 
    def logic(*args, **kw): 
     params = dict(kw) 

     for parameter_name in parameter_names: 
      if parameter_name in request.args: 
       params[parameter_name] = request.args.get(parameter_name) 

     return f(**params) 

    return logic 

@app.route('/hello/<uid>', methods=['GET', 'POST']) 
@query_params 
def hello_world(uid, name): 
    return jsonify({ 
     'uid': uid, 
     'name': name 
    })